1package api
2
3import (
4	"testing"
5
6	"github.com/hashicorp/consul/sdk/testutil"
7)
8
9func TestAPI_OperatorKeyringInstallListPutRemove(t *testing.T) {
10	t.Parallel()
11	oldKey := "d8wu8CSUrqgtjVsvcBPmhQ=="
12	newKey := "qxycTi/SsePj/TZzCBmNXw=="
13	c, s := makeClientWithConfig(t, nil, func(c *testutil.TestServerConfig) {
14		c.Encrypt = oldKey
15	})
16	defer s.Stop()
17
18	operator := c.Operator()
19	if err := operator.KeyringInstall(newKey, nil); err != nil {
20		t.Fatalf("err: %v", err)
21	}
22
23	listResponses, err := operator.KeyringList(nil)
24	if err != nil {
25		t.Fatalf("err %v", err)
26	}
27
28	// Make sure the new key is installed
29	if len(listResponses) != 2 {
30		t.Fatalf("bad: %v", len(listResponses))
31	}
32	for _, response := range listResponses {
33		if len(response.Keys) != 2 {
34			t.Fatalf("bad: %v", len(response.Keys))
35		}
36		if _, ok := response.Keys[oldKey]; !ok {
37			t.Fatalf("bad: %v", ok)
38		}
39		if _, ok := response.Keys[newKey]; !ok {
40			t.Fatalf("bad: %v", ok)
41		}
42	}
43
44	// Switch the primary to the new key
45	if err := operator.KeyringUse(newKey, nil); err != nil {
46		t.Fatalf("err: %v", err)
47	}
48
49	if err := operator.KeyringRemove(oldKey, nil); err != nil {
50		t.Fatalf("err: %v", err)
51	}
52
53	listResponses, err = operator.KeyringList(nil)
54	if err != nil {
55		t.Fatalf("err %v", err)
56	}
57
58	// Make sure the old key is removed
59	if len(listResponses) != 2 {
60		t.Fatalf("bad: %v", len(listResponses))
61	}
62	for _, response := range listResponses {
63		if len(response.Keys) != 1 {
64			t.Fatalf("bad: %v", len(response.Keys))
65		}
66		if _, ok := response.Keys[oldKey]; ok {
67			t.Fatalf("bad: %v", ok)
68		}
69		if _, ok := response.Keys[newKey]; !ok {
70			t.Fatalf("bad: %v", ok)
71		}
72	}
73}
74