File: policy_test.go

package info (click to toggle)
golang-step-linkedca 0.19.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 520 kB
  • sloc: makefile: 28
file content (164 lines) | stat: -rw-r--r-- 4,476 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package linkedca

import (
	"reflect"
	"testing"

	"github.com/stretchr/testify/assert"
)

func Test_removeDuplicates(t *testing.T) {
	tests := []struct {
		name  string
		input []string
		want  []string
	}{
		{
			name:  "empty-slice",
			input: []string{},
			want:  []string{},
		},
		{
			name:  "single-item",
			input: []string{"x"},
			want:  []string{"x"},
		},
		{
			name:  "ok",
			input: []string{"x", "y", "x", "z", "x", "z", "y"},
			want:  []string{"x", "y", "z"},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := removeDuplicates(tt.input); !reflect.DeepEqual(got, tt.want) {
				t.Errorf("removeDuplicates() = %v, want %v", got, tt.want)
			}
		})
	}
}

func TestPolicy_Deduplicate(t *testing.T) {
	tests := []struct {
		name     string
		policy   *Policy
		expected *Policy
	}{
		{
			name:     "nil",
			policy:   nil,
			expected: nil,
		},
		{
			name: "x509",
			policy: &Policy{
				X509: &X509Policy{
					Allow: &X509Names{
						Dns:         []string{"*.local", "*.example.com", "*.local"},
						Ips:         []string{"192.168.0.0/24", "10.10.10.0/24", "192.168.0.0/24"},
						Emails:      []string{"@example.com", "@local", "@example.com"},
						Uris:        []string{"*.local", "*.example.com", "*.local"},
						CommonNames: []string{"bla", "host", "bla"},
					},
					Deny: &X509Names{
						Dns:         []string{"*.local", "*.example.com", "*.local"},
						Ips:         []string{"192.168.0.0/24", "10.10.10.0/24", "192.168.0.0/24"},
						Emails:      []string{"@example.com", "@local", "@example.com"},
						Uris:        []string{"*.local", "*.example.com", "*.local"},
						CommonNames: []string{"bla", "host", "bla"},
					},
				},
			},
			expected: &Policy{
				X509: &X509Policy{
					Allow: &X509Names{
						Dns:         []string{"*.local", "*.example.com"},
						Ips:         []string{"192.168.0.0/24", "10.10.10.0/24"},
						Emails:      []string{"@example.com", "@local"},
						Uris:        []string{"*.local", "*.example.com"},
						CommonNames: []string{"bla", "host"},
					},
					Deny: &X509Names{
						Dns:         []string{"*.local", "*.example.com"},
						Ips:         []string{"192.168.0.0/24", "10.10.10.0/24"},
						Emails:      []string{"@example.com", "@local"},
						Uris:        []string{"*.local", "*.example.com"},
						CommonNames: []string{"bla", "host"},
					},
				},
			},
		},
		{
			name: "ssh-host",
			policy: &Policy{
				Ssh: &SSHPolicy{
					Host: &SSHHostPolicy{
						Allow: &SSHHostNames{
							Dns:        []string{"*.local", "*.example.com", "*.local"},
							Ips:        []string{"192.168.0.0/24", "10.10.10.0/24", "192.168.0.0/24"},
							Principals: []string{"localhost", "test", "localhost"},
						},
						Deny: &SSHHostNames{
							Dns:        []string{"*.local", "*.example.com", "*.local"},
							Ips:        []string{"192.168.0.0/24", "10.10.10.0/24", "192.168.0.0/24"},
							Principals: []string{"localhost", "test", "localhost"},
						},
					},
				},
			},
			expected: &Policy{
				Ssh: &SSHPolicy{
					Host: &SSHHostPolicy{
						Allow: &SSHHostNames{
							Dns:        []string{"*.local", "*.example.com"},
							Ips:        []string{"192.168.0.0/24", "10.10.10.0/24"},
							Principals: []string{"localhost", "test"},
						},
						Deny: &SSHHostNames{
							Dns:        []string{"*.local", "*.example.com"},
							Ips:        []string{"192.168.0.0/24", "10.10.10.0/24"},
							Principals: []string{"localhost", "test"},
						},
					},
				},
			},
		},
		{
			name: "ssh-user",
			policy: &Policy{
				Ssh: &SSHPolicy{
					User: &SSHUserPolicy{
						Allow: &SSHUserNames{
							Emails:     []string{"@example.com", "@local", "@example.com"},
							Principals: []string{"user", "root", "user"},
						},
						Deny: &SSHUserNames{
							Emails:     []string{"@example.com", "@local", "@example.com"},
							Principals: []string{"user", "root", "user"},
						},
					},
				},
			},
			expected: &Policy{
				Ssh: &SSHPolicy{
					User: &SSHUserPolicy{
						Allow: &SSHUserNames{
							Emails:     []string{"@example.com", "@local"},
							Principals: []string{"user", "root"},
						},
						Deny: &SSHUserNames{
							Emails:     []string{"@example.com", "@local"},
							Principals: []string{"user", "root"},
						},
					},
				},
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			tt.policy.Deduplicate()
			assert.Equal(t, tt.expected, tt.policy)
		})
	}
}