12 func TestPullWorker(t *testing.T) {
15 // Since keepstore does not come into picture in tests,
16 // we need to explicitly start the goroutine in tests.
17 go RunPullWorker(pullq.NextItem)
19 data_manager_token = "DATA MANAGER TOKEN"
21 first_pull_list := []byte(`[
23 "locator":"locator1_to_verify_first_pull_list",
30 "locator":"locator2_to_verify_first_pull_list",
37 second_pull_list := []byte(`[
39 "locator":"locator_to_verify_second_pull_list",
47 type PullWorkerTestData struct {
56 var testcases = []PullWorkerTestData{
58 "Pull request 1 from the data manager in worker",
59 RequestTester{"/pull", data_manager_token, "PUT", first_pull_list},
61 "Received 2 pull requests\n",
67 "Pull request 2 from the data manager in worker",
68 RequestTester{"/pull", data_manager_token, "PUT", second_pull_list},
70 "Received 1 pull requests\n",
76 "Pull request with error on get",
77 RequestTester{"/pull", data_manager_token, "PUT", second_pull_list},
79 "Received 1 pull requests\n",
85 "Pull request with error on put",
86 RequestTester{"/pull", data_manager_token, "PUT", second_pull_list},
88 "Received 1 pull requests\n",
95 for _, testData := range testcases {
96 // Override GetContent to mock keepclient functionality
97 GetContent = func(signedLocator string) (reader io.ReadCloser, contentLength int64, url string, err error) {
98 if testData.read_error {
99 return nil, 0, "", errors.New("Error getting data")
101 cb := &ClosingBuffer{bytes.NewBufferString("Hi!")}
104 return rc, 3, "", nil
108 // Override PutContent to mock PutBlock functionality
109 PutContent = func(content []byte, locator string) (err error) {
110 if testData.put_error {
111 return errors.New("Error putting data")
117 response := IssueRequest(&testData.req)
118 ExpectStatusCode(t, testData.name, testData.response_code, response)
119 ExpectBody(t, testData.name, testData.response_body, response)
121 // give the channel a second to read and process all pull list entries
122 time.Sleep(1000 * time.Millisecond)
124 expectChannelEmpty(t, pullq.NextItem)
128 type ClosingBuffer struct {
132 func (cb *ClosingBuffer) Close() (err error) {