| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // Copyright (c) Tailscale Inc & AUTHORS
- // SPDX-License-Identifier: BSD-3-Clause
- package ipn
- import (
- "bytes"
- "sync"
- "testing"
- "tailscale.com/util/mak"
- )
- type memStore struct {
- mu sync.Mutex
- writes int
- m map[StateKey][]byte
- }
- func (s *memStore) ReadState(k StateKey) ([]byte, error) {
- s.mu.Lock()
- defer s.mu.Unlock()
- return bytes.Clone(s.m[k]), nil
- }
- func (s *memStore) WriteState(k StateKey, v []byte) error {
- s.mu.Lock()
- defer s.mu.Unlock()
- mak.Set(&s.m, k, bytes.Clone(v))
- s.writes++
- return nil
- }
- func TestWriteState(t *testing.T) {
- var ss StateStore = new(memStore)
- WriteState(ss, "foo", []byte("bar"))
- WriteState(ss, "foo", []byte("bar"))
- got, err := ss.ReadState("foo")
- if err != nil {
- t.Fatal(err)
- }
- if want := []byte("bar"); !bytes.Equal(got, want) {
- t.Errorf("got %q; want %q", got, want)
- }
- if got, want := ss.(*memStore).writes, 1; got != want {
- t.Errorf("got %d writes; want %d", got, want)
- }
- }
|