123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Copyright (C) 2018 The Syncthing Authors.
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
- // You can obtain one at https://mozilla.org/MPL/2.0/.
- package db
- import (
- "testing"
- )
- func TestSmallIndex(t *testing.T) {
- db := newLowlevelMemory(t)
- idx := newSmallIndex(db, []byte{12, 34})
- // ID zero should be unallocated
- if val, ok := idx.Val(0); ok || val != nil {
- t.Fatal("Unexpected return for nonexistent ID 0")
- }
- // A new key should get ID zero
- if id, err := idx.ID([]byte("hello")); err != nil {
- t.Fatal(err)
- } else if id != 0 {
- t.Fatal("Expected 0, not", id)
- }
- // Looking up ID zero should work
- if val, ok := idx.Val(0); !ok || string(val) != "hello" {
- t.Fatalf(`Expected true, "hello", not %v, %q`, ok, val)
- }
- // Delete the key
- idx.Delete([]byte("hello"))
- // Next ID should be one
- if id, err := idx.ID([]byte("key2")); err != nil {
- t.Fatal(err)
- } else if id != 1 {
- t.Fatal("Expected 1, not", id)
- }
- // Now lets create a new index instance based on what's actually serialized to the database.
- idx = newSmallIndex(db, []byte{12, 34})
- // Status should be about the same as before.
- if val, ok := idx.Val(0); ok || val != nil {
- t.Fatal("Unexpected return for deleted ID 0")
- }
- if id, err := idx.ID([]byte("key2")); err != nil {
- t.Fatal(err)
- } else if id != 1 {
- t.Fatal("Expected 1, not", id)
- }
- // Setting "hello" again should get us ID 2, not 0 as it was originally.
- if id, err := idx.ID([]byte("hello")); err != nil {
- t.Fatal(err)
- } else if id != 2 {
- t.Fatal("Expected 2, not", id)
- }
- }
|