github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/libkbfs/keycache_test.go (about)

     1  // Copyright 2016 Keybase Inc. All rights reserved.
     2  // Use of this source code is governed by a BSD
     3  // license that can be found in the LICENSE file.
     4  
     5  package libkbfs
     6  
     7  import (
     8  	"errors"
     9  	"testing"
    10  
    11  	"github.com/keybase/client/go/kbfs/kbfscrypto"
    12  	"github.com/keybase/client/go/kbfs/kbfsmd"
    13  	"github.com/keybase/client/go/kbfs/tlf"
    14  )
    15  
    16  func TestKeyCacheBasic(t *testing.T) {
    17  	cache := NewKeyCacheStandard(10)
    18  	id := tlf.FakeID(100, tlf.Public)
    19  	key := kbfscrypto.MakeTLFCryptKey([32]byte{0xf})
    20  	keyGen := kbfsmd.FirstValidKeyGen
    21  	_, err := cache.GetTLFCryptKey(id, keyGen)
    22  	if _, ok := err.(KeyCacheMissError); !ok {
    23  		t.Fatal(errors.New("expected KeyCacheMissError"))
    24  	}
    25  	err = cache.PutTLFCryptKey(id, keyGen, key)
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  	// add the same key twice
    30  	err = cache.PutTLFCryptKey(id, keyGen, key)
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  	key2, err := cache.GetTLFCryptKey(id, keyGen)
    35  	if err != nil {
    36  		t.Fatal(err)
    37  	}
    38  	if key != key2 {
    39  		t.Fatal("keys are unequal")
    40  	}
    41  	for i := 0; i < 11; i++ {
    42  		id = tlf.FakeID(byte(i), tlf.Public)
    43  		key = kbfscrypto.MakeTLFCryptKey([32]byte{byte(i)})
    44  		err = cache.PutTLFCryptKey(id, keyGen, key)
    45  		if err != nil {
    46  			t.Fatal(err)
    47  		}
    48  	}
    49  	for i := 0; i < 11; i++ {
    50  		id = tlf.FakeID(byte(i), tlf.Public)
    51  		_, err = cache.GetTLFCryptKey(id, keyGen)
    52  		if i > 0 && err != nil {
    53  			t.Fatal(err)
    54  		}
    55  		if i == 0 && err == nil {
    56  			t.Fatal(errors.New("key not expected"))
    57  		}
    58  	}
    59  }