Challenge Overview

Project Overview

You may remember Go learning challenge series: http://www.topcoder.com/challenge-details/30046224/?type=develop&noncache=true

Now we began the real project with Go language!

The client is a leading cloud-based security provider in Japan. 

In this project, we will develop a mail proxy server which talks to POP/IMAP servers and MUA(Mail Client Software).

Competition Task Overview

POP command implementations

In this challenge, you need to develop a simple POP Proxy server for Google Apps and Thunderbird.

In the previous challenge we've already implemented several POP commands, in this challenge we need to complete the rest of them and enhance the UIDL command.

You can find the test scenario sheet at "POP full" sheet (link to be posted in challenge forum).

Note that the proxy accepts POP commands but talk to GMail server using corresponding IMAP commands.

Deliverables need to pass the scenario prior to submission.

POP UIDL command performance improvement

As shown in the deployment guide of previous assembly and the test scenarios spreadsheet, the performance of the UIDL command is not very good and needs to be enhanced:

  • It is slow to get mail with the current code. We need to improve the performance.
  • The reason seems to be a poor performance of UIDL. Here is a comment of the developer:
    • the current implementation is to download emails from google server to proxy, and calculate the UIDL of each email at proxy. Then the response for command UIDL is returned to client.
    • The result is: the response time for command UIDL is much longer than that of a normal POP3 server.
  • You may use imap command `FETCH 1:* UID` or `UID SEARCH ALL` to simulate UIDL although we do not guarantee it works.
  • We would also like to support concurrent access from a lot of MUAs (say 100 on AWS large instance)
  • We currently do not have performance metrics or a performance tool for it unfortunately.
  • It would be very appreciated if you write how you can measure the performance of your code in "Development Guide" doc.

Testing

As stated above you must make sure your submission passes the screnarios from the google spreadsheet.

Dev Process

We're going to use gitlab for this project and we'll follow the following process:

  1. ���We push the original source tree to the private repository and create a challenge to update it (we'll provide link to source tree in forum)
  2. You should request access to it in the forum by providing your gitlab username. We will add you as "Developer" to the repo
  3. You can fork our tree and make updates to your local branch. You must add tiwasaki and huangqun as "Master" and reviewers as "Reporter" to your private branch.
  4. You must submit the branch name on topcoder.  You should NEVER make a merge request because it can be visible to other registrants
  5. The reviewers review your submission based on the code in the branch and score the submission
  6. Once winner is selected, the winner will need to fix all issues found in review and submit a pull/merge request
  7. The winner will also help with merging in case of conflicts

Code Guidelines

Follow practices mentioned in the articles below:

  • http://golang.org/doc/effective_go.html
  • https://code.google.com/p/go-wiki/wiki/CodeReviewComments#Go_Code_Review_Comments

The client has a following naming conventions:

  • Use ‘lower_case_with_underscore’ name for package, file or directory. However, try to avoid underscores and prefer short names.

External Libraries

If you would like to use external libraries please follow the guidelines below:

  • Do not use libraries developed with languages other than Golang
  • Do not use GPL libraries and LGPL libraries
  • MIT, Apache and BSD libraries are fine
  • Please mention about external libraries you used in your README

Code Design

We will enhance the code in future challenges and so your code should prepare for it (which is related to scorecard question 1.1.6).

You can see from the test scenarios we'll have the following implemented in future challenges:

  • POP/IMAP support in the single source
  • SSL connection

Scorecard

We are using a custom scorecard for this challenge.

Test Code

- You should write at least one unit test file (*_test.go) for each go file.
- You should NOT use a shell script for test, you should write any test script with go only.
- Functional test which follows the test scenario with go file.
- It should cover more than 75% code (You can measure it with `go test -cover`)

Technology Overview

  • Go
  • POP

Documentation Provided

Register to see resources in challenge forum.



Final Submission Guidelines

Submission Deliverables

  • Source code (Format your code with ‘gofmt’ command)
  • Test code (*_test.go).
  • README to explain your deliverables and how to setup your submission and verify the features. This File should be included in your own gitlab repo.

Final Submission

For each member, the private gitlab repo / branch name and link must be uploaded via the challenge detail page on topcoder.com

ELIGIBLE EVENTS:

2015 topcoder Open

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30047293