Example #1
0
func getSequins(t *testing.T, opts sequinsOptions) *sequins {
	os.RemoveAll("test_data/0/.manifest")
	os.RemoveAll("test_data/1/.manifest")
	backend := backend.NewLocalBackend("test_data")
	s := newSequins(backend, opts)

	require.NoError(t, s.init())
	return s
}
Example #2
0
func localSetup(localPath string, opts sequinsOptions) *sequins {
	absPath, err := filepath.Abs(localPath)
	if err != nil {
		log.Fatal(err)
	}

	backend := backend.NewLocalBackend(absPath)
	opts.LocalPath = absPath

	return newSequins(backend, opts)
}
Example #3
0
// TestSequinsThreadsafe makes sure that reads that occur during an update DTRT
func TestSequinsThreadsafe(t *testing.T) {
	scratch, err := ioutil.TempDir("", "sequins-")
	require.NoError(t, err)
	createTestIndex(t, scratch, 0)
	ts := newSequins(backend.NewLocalBackend(scratch), sequinsOptions{scratch, false})
	h := ts.handler()
	require.NoError(t, ts.init())

	var wg sync.WaitGroup
	threads := 50
	wg.Add(threads)
	for i := 0; i < threads; i++ {
		go func() {
			for j := 0; j < 1000; j++ {
				req, err := http.NewRequest("GET", "/Alice", nil)
				assert.NoError(t, err)

				w := httptest.NewRecorder()
				h.ServeHTTP(w, req)

				if w.Code != 200 && w.Code != 404 {
					// we might get either response, depending on which version of the db we see
					// we just want to make sure that we don't 500 (or anything else)
					t.Errorf("Got error response when making a request (status=%d)", w.Code)
				}
			}
			wg.Done()
		}()
	}

	for i := 1; i < 100; i++ {
		createTestIndex(t, scratch, i)
		ts.reloadLatest()
	}
	wg.Wait()
	require.NoError(t, os.RemoveAll(scratch))
}
Example #4
0
func TestSequinsNoValidDirectories(t *testing.T) {
	backend := backend.NewLocalBackend("test_data/0")
	s := newSequins(backend, sequinsOptions{"test_data/0", false})
	err := s.init()
	assert.Error(t, err)
}