This repository contains the starter code that you will use as the basis of your key-value messaging system implementation. It also contains the tests that we will use to test your implementation, and an example 'server runner' binary that you might find useful for your own testing purposes.
If at any point you have any trouble with building, installing, or testing your code, the article
titled How to Write Go Code is a great resource for understanding
how Go workspaces are built and organized. You might also find the documentation for the
go command to be helpful. As always, feel free to post your questions
on Piazza as well.
To test your submission, we will execute the following command from inside the
src/github.com/cmu440/p0partA directory:
$ go testWe will also check your code for race conditions using Go's race detector by executing the following command:
$ go test -raceTo execute a single unit test, you can use the -test.run flag and specify a regular expression
identifying the name of the test to run. For example,
$ go test -race -test.run TestBasic1Our reference solution was tested on the AFS clusters, so we strongly recommend that you test your solution on AFS before submitting.
To make testing your server a bit easier (especially during the early stages of your implementation
when your server is largely incomplete), we have given you a simple srunner (server runner)
program that you can use to create and start an instance of your KeyValueServer. The program
simply creates an instance of your server, starts it on a default port, and blocks forever,
running your server in the background.
To compile and build the srunner program into a binary that you can run, execute the three
commands below (these directions assume you have cloned this repo to $HOME/p0):
$ export GOPATH=$HOME/p0
$ go install github.com/cmu440/srunner
$ $GOPATH/bin/srunnerThe srunner program won't be of much use to you without any clients. It might be a good exercise
to implement your own crunner (client runner) program that you can use to connect with and send
messages to your server. We have provided you with an unimplemented crunner program that you may
use for this purpose if you wish. Whether or not you decide to implement a crunner program will not
affect your grade for this project.
You could also test your server using Netcat as you saw shortly in lecture (i.e. run the srunner
binary in the background, execute nc localhost 9999, type the message you wish to send, and then
click enter).
Once you have written your test, simply run
$ go testin p0partB to confirm that the test passes on the correct implementation.
Submit an archive created by running make handin from src/github.com/cmu440. Do not change the names of the files (server_impl.go and squarer_test.go) as this will cause the tests to fail.
For those students who wish to write their Go code on AFS (either in a cluster or remotely), you will
need to set the GOROOT environment variable as follows (this is required because Go is installed
in a custom location on AFS machines):
$ export GOROOT=/usr/local/depot/go