// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package watchable

import (
	"testing"

	"v.io/syncbase/x/ref/services/syncbase/clock"
)

// TestGetNextLogSeq tests that the getNextLogSeq helper works on range 0..10.
func TestGetNextLogSeq(t *testing.T) {
	st, destroy := createStore()
	defer destroy()
	var mockAdapter clock.StorageAdapter = clock.MockStorageAdapter()
	vclock := clock.NewVClockWithMockServices(mockAdapter, nil, nil)
	st, err := Wrap(st, vclock, &Options{})
	if err != nil {
		t.Fatal(err)
	}
	for i := uint64(0); i <= uint64(10); i++ {
		seq, err := getNextLogSeq(st)
		if err != nil {
			t.Fatalf("failed to get log seq: %v", err)
		}
		if got, want := seq, i; got != want {
			t.Fatalf("unexpected log seq: got %v, want %v", got, want)
		}
		st.Put([]byte(logEntryKey(i)), nil)
	}
}
