1
2
3
4
5 package sso
6
7 import (
8 "context"
9 "errors"
10 "fmt"
11 "github.com/aws/smithy-go/middleware"
12 "io"
13 "io/fs"
14 "os"
15 "testing"
16 )
17
18 const ssprefix = "snapshot"
19
20 type snapshotOK struct{}
21
22 func (snapshotOK) Error() string { return "error: success" }
23
24 func createp(path string) (*os.File, error) {
25 if err := os.Mkdir(ssprefix, 0700); err != nil && !errors.Is(err, fs.ErrExist) {
26 return nil, err
27 }
28 return os.Create(path)
29 }
30
31 func sspath(op string) string {
32 return fmt.Sprintf("%s/api_op_%s.go.snap", ssprefix, op)
33 }
34
35 func updateSnapshot(stack *middleware.Stack, operation string) error {
36 f, err := createp(sspath(operation))
37 if err != nil {
38 return err
39 }
40 defer f.Close()
41 if _, err := f.Write([]byte(stack.String())); err != nil {
42 return err
43 }
44 return snapshotOK{}
45 }
46
47 func testSnapshot(stack *middleware.Stack, operation string) error {
48 f, err := os.Open(sspath(operation))
49 if errors.Is(err, fs.ErrNotExist) {
50 return snapshotOK{}
51 }
52 if err != nil {
53 return err
54 }
55 defer f.Close()
56 expected, err := io.ReadAll(f)
57 if err != nil {
58 return err
59 }
60 if actual := stack.String(); actual != string(expected) {
61 return fmt.Errorf("%s != %s", expected, actual)
62 }
63 return snapshotOK{}
64 }
65 func TestCheckSnapshot_GetRoleCredentials(t *testing.T) {
66 svc := New(Options{})
67 _, err := svc.GetRoleCredentials(context.Background(), nil, func(o *Options) {
68 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
69 return testSnapshot(stack, "GetRoleCredentials")
70 })
71 })
72 if _, ok := err.(snapshotOK); !ok && err != nil {
73 t.Fatal(err)
74 }
75 }
76
77 func TestCheckSnapshot_ListAccountRoles(t *testing.T) {
78 svc := New(Options{})
79 _, err := svc.ListAccountRoles(context.Background(), nil, func(o *Options) {
80 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
81 return testSnapshot(stack, "ListAccountRoles")
82 })
83 })
84 if _, ok := err.(snapshotOK); !ok && err != nil {
85 t.Fatal(err)
86 }
87 }
88
89 func TestCheckSnapshot_ListAccounts(t *testing.T) {
90 svc := New(Options{})
91 _, err := svc.ListAccounts(context.Background(), nil, func(o *Options) {
92 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
93 return testSnapshot(stack, "ListAccounts")
94 })
95 })
96 if _, ok := err.(snapshotOK); !ok && err != nil {
97 t.Fatal(err)
98 }
99 }
100
101 func TestCheckSnapshot_Logout(t *testing.T) {
102 svc := New(Options{})
103 _, err := svc.Logout(context.Background(), nil, func(o *Options) {
104 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
105 return testSnapshot(stack, "Logout")
106 })
107 })
108 if _, ok := err.(snapshotOK); !ok && err != nil {
109 t.Fatal(err)
110 }
111 }
112 func TestUpdateSnapshot_GetRoleCredentials(t *testing.T) {
113 svc := New(Options{})
114 _, err := svc.GetRoleCredentials(context.Background(), nil, func(o *Options) {
115 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
116 return updateSnapshot(stack, "GetRoleCredentials")
117 })
118 })
119 if _, ok := err.(snapshotOK); !ok && err != nil {
120 t.Fatal(err)
121 }
122 }
123
124 func TestUpdateSnapshot_ListAccountRoles(t *testing.T) {
125 svc := New(Options{})
126 _, err := svc.ListAccountRoles(context.Background(), nil, func(o *Options) {
127 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
128 return updateSnapshot(stack, "ListAccountRoles")
129 })
130 })
131 if _, ok := err.(snapshotOK); !ok && err != nil {
132 t.Fatal(err)
133 }
134 }
135
136 func TestUpdateSnapshot_ListAccounts(t *testing.T) {
137 svc := New(Options{})
138 _, err := svc.ListAccounts(context.Background(), nil, func(o *Options) {
139 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
140 return updateSnapshot(stack, "ListAccounts")
141 })
142 })
143 if _, ok := err.(snapshotOK); !ok && err != nil {
144 t.Fatal(err)
145 }
146 }
147
148 func TestUpdateSnapshot_Logout(t *testing.T) {
149 svc := New(Options{})
150 _, err := svc.Logout(context.Background(), nil, func(o *Options) {
151 o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
152 return updateSnapshot(stack, "Logout")
153 })
154 })
155 if _, ok := err.(snapshotOK); !ok && err != nil {
156 t.Fatal(err)
157 }
158 }
159
View as plain text