func TestBuildWriteValueRequest(t *testing.T) { assert := assert.New(t) input1, input2 := "abc", "def" chnx := []chunks.Chunk{ chunks.NewChunk([]byte(input1)), chunks.NewChunk([]byte(input2)), } hints := map[hash.Hash]struct{}{ hash.Parse("sha1-0000000000000000000000000000000000000002"): struct{}{}, hash.Parse("sha1-0000000000000000000000000000000000000003"): struct{}{}, } compressed := buildWriteValueRequest(serializeChunks(chnx, assert), hints) gr := snappy.NewReader(compressed) count := 0 for hint := range deserializeHints(gr) { count++ _, present := hints[hint] assert.True(present) } assert.Equal(len(hints), count) chunkChan := make(chan *chunks.Chunk, 16) go chunks.DeserializeToChan(gr, chunkChan) for c := range chunkChan { assert.Equal(chnx[0].Hash(), c.Hash()) chnx = chnx[1:] } assert.Empty(chnx) }
func TestHandleGetRefs(t *testing.T) { assert := assert.New(t) cs := chunks.NewTestStore() input1, input2 := "abc", "def" chnx := []chunks.Chunk{ chunks.NewChunk([]byte(input1)), chunks.NewChunk([]byte(input2)), } err := cs.PutMany(chnx) assert.NoError(err) body := strings.NewReader(fmt.Sprintf("ref=%s&ref=%s", chnx[0].Hash(), chnx[1].Hash())) w := httptest.NewRecorder() HandleGetRefs(w, &http.Request{Body: ioutil.NopCloser(body), Method: "POST", Header: http.Header{ "Content-Type": {"application/x-www-form-urlencoded"}, }}, params{}, cs, ) if assert.Equal(http.StatusOK, w.Code, "Handler error:\n%s", string(w.Body.Bytes())) { chunkChan := make(chan *chunks.Chunk) go chunks.DeserializeToChan(w.Body, chunkChan) for c := range chunkChan { assert.Equal(chnx[0].Hash(), c.Hash()) chnx = chnx[1:] } assert.Empty(chnx) } }
func TestHandleHasRefs(t *testing.T) { assert := assert.New(t) cs := chunks.NewTestStore() input1, input2 := "abc", "def" chnx := []chunks.Chunk{ chunks.NewChunk([]byte(input1)), chunks.NewChunk([]byte(input2)), } err := cs.PutMany(chnx) assert.NoError(err) absent := hash.Parse("00000000000000000000000000000002") body := strings.NewReader(fmt.Sprintf("ref=%s&ref=%s&ref=%s", chnx[0].Hash(), chnx[1].Hash(), absent)) w := httptest.NewRecorder() HandleHasRefs( w, newRequest("POST", "", "", body, http.Header{ "Content-Type": {"application/x-www-form-urlencoded"}, }), params{}, cs, ) if assert.Equal(http.StatusOK, w.Code, "Handler error:\n%s", string(w.Body.Bytes())) { scanner := bufio.NewScanner(w.Body) scanner.Split(bufio.ScanWords) for scanner.Scan() { h := hash.Parse(scanner.Text()) scanner.Scan() if scanner.Text() == "true" { assert.Equal(chnx[0].Hash(), h) chnx = chnx[1:] } else { assert.Equal(absent, h) } } assert.Empty(chnx) } }
// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // // assert.Empty(t, obj) // // Returns whether the assertion was successful (true) or not (false). func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { if !assert.Empty(t, object, msgAndArgs...) { t.FailNow() } }