service_test.go 1.99 KB
Newer Older
acud's avatar
acud committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
// Copyright 2020 The Swarm 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 postage_test

import (
	crand "crypto/rand"
	"io"
	"reflect"
	"testing"

	"github.com/ethersphere/bee/pkg/postage"
	storemock "github.com/ethersphere/bee/pkg/statestore/mock"
)

// TestSaveLoad tests the idempotence of saving and loading the postage.Service
// with all the active stamp issuers.
func TestSaveLoad(t *testing.T) {
	store := storemock.NewStateStore()
	saved := func(id int64) postage.Service {
22 23 24 25
		ps, err := postage.NewService(store, id)
		if err != nil {
			t.Fatal(err)
		}
acud's avatar
acud committed
26 27 28
		for i := 0; i < 16; i++ {
			ps.Add(newTestStampIssuer(t))
		}
29
		if err := ps.Close(); err != nil {
acud's avatar
acud committed
30 31 32 33 34
			t.Fatal(err)
		}
		return ps
	}
	loaded := func(id int64) postage.Service {
35 36
		ps, err := postage.NewService(store, id)
		if err != nil {
acud's avatar
acud committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
			t.Fatal(err)
		}
		return ps
	}
	test := func(id int64) {
		psS := saved(id)
		psL := loaded(id)
		if !reflect.DeepEqual(psS.StampIssuers(), psL.StampIssuers()) {
			t.Fatalf("load(save(service)) != service\n%v\n%v", psS.StampIssuers(), psL.StampIssuers())
		}
	}
	test(0)
	test(1)
}

func TestGetStampIssuer(t *testing.T) {
	store := storemock.NewStateStore()
54 55 56 57
	ps, err := postage.NewService(store, int64(0))
	if err != nil {
		t.Fatal(err)
	}
acud's avatar
acud committed
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
	ids := make([][]byte, 8)
	for i := range ids {
		id := make([]byte, 32)
		_, err := io.ReadFull(crand.Reader, id)
		if err != nil {
			t.Fatal(err)
		}
		ids[i] = id
		if i == 0 {
			continue
		}
		ps.Add(postage.NewStampIssuer(string(id), "", id, 16, 8))
	}
	t.Run("found", func(t *testing.T) {
		for _, id := range ids[1:] {
			st, err := ps.GetStampIssuer(id)
			if err != nil {
				t.Fatalf("expected no error, got %v", err)
			}
			if st.Label() != string(id) {
				t.Fatalf("wrong issuer returned")
			}
		}
	})
	t.Run("not found", func(t *testing.T) {
		_, err := ps.GetStampIssuer(ids[0])
		if err != postage.ErrNotFound {
			t.Fatalf("expected ErrNotFound, got %v", err)
		}
	})
}