func main() { chunks.RegisterLevelDBFlags() dynFlags := chunks.DynamoFlags("") flag.Usage = usage flag.Parse() if *portFlag == 0 || *authKeyFlag == "" { usage() return } var factory chunks.Factory if factory = dynFlags.CreateFactory(); factory != nil { fmt.Printf("Using dynamo ...\n") } else if *ldbDir != "" { factory = chunks.NewLevelDBStoreFactoryUseFlags(*ldbDir) fmt.Printf("Using leveldb ...\n") } else { factory = chunks.NewMemoryStoreFactory() fmt.Printf("Using mem ...\n") } defer factory.Shutter() startWebServer(factory, *authKeyFlag) }
func TestWriteValue(t *testing.T) { assert := assert.New(t) factory := chunks.NewMemoryStoreFactory() defer factory.Shutter() router = setupWebServer(factory) defer func() { router = nil }() testString := "Now, what?" authKey = "anauthkeyvalue" w := httptest.NewRecorder() r, err := newRequest("GET", dbName+constants.RootPath, nil) assert.NoError(err) router.ServeHTTP(w, r) lastRoot := w.Body assert.Equal(http.StatusOK, w.Code) tval := types.Bool(true) wval := types.String(testString) chunk1 := types.EncodeValue(tval, nil) chunk2 := types.EncodeValue(wval, nil) refList := types.NewList(types.NewRef(tval), types.NewRef(wval)) chunk3 := types.EncodeValue(refList, nil) body := &bytes.Buffer{} // we would use this func, but it's private so use next line instead: serializeHints(body, map[ref.Ref]struct{}{hint: struct{}{}}) err = binary.Write(body, binary.BigEndian, uint32(0)) assert.NoError(err) chunks.Serialize(chunk1, body) chunks.Serialize(chunk2, body) chunks.Serialize(chunk3, body) w = httptest.NewRecorder() r, err = newRequest("POST", dbName+constants.WriteValuePath+"?access_token="+authKey, ioutil.NopCloser(body)) assert.NoError(err) router.ServeHTTP(w, r) assert.Equal(http.StatusCreated, w.Code) w = httptest.NewRecorder() args := fmt.Sprintf("&last=%s¤t=%s", lastRoot, types.NewRef(refList).TargetHash()) r, _ = newRequest("POST", dbName+constants.RootPath+"?access_token="+authKey+args, ioutil.NopCloser(body)) router.ServeHTTP(w, r) assert.Equal(http.StatusOK, w.Code) whash := wval.Hash() hints := map[hash.Hash]struct{}{whash: struct{}{}} rdr := buildGetRefsRequestBody(hints) r, _ = newRequest("POST", dbName+constants.GetRefsPath, rdr) r.Header.Add("Content-Type", "application/x-www-form-urlencoded") router.ServeHTTP(w, r) assert.Equal(http.StatusOK, w.Code) ms := chunks.NewMemoryStore() chunks.Deserialize(w.Body, ms, nil) v := types.DecodeValue(ms.Get(whash), datas.NewDatabase(ms)) assert.Equal(testString, string(v.(types.String))) }
func TestRoot(t *testing.T) { assert := assert.New(t) factory := chunks.NewMemoryStoreFactory() defer factory.Shutter() router = setupWebServer(factory) defer func() { router = nil }() w := httptest.NewRecorder() r, _ := newRequest("GET", dbName+constants.RootPath, nil) router.ServeHTTP(w, r) assert.Equal("00000000000000000000000000000000", w.Body.String()) w = httptest.NewRecorder() r, _ = newRequest("OPTIONS", dbName+constants.RootPath, nil) r.Header.Add("Origin", "http://www.noms.io") router.ServeHTTP(w, r) assert.Equal(w.HeaderMap["Access-Control-Allow-Origin"][0], "http://www.noms.io") }