/
atlas_org_api_key_access_list_test.go
127 lines (112 loc) · 3.13 KB
/
atlas_org_api_key_access_list_test.go
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
// Copyright 2020 MongoDB Inc
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build e2e || (iam && atlas)
package iam_test
import (
"encoding/json"
"fmt"
"os"
"os/exec"
"testing"
"github.com/mongodb/mongodb-atlas-cli/mongocli/v2/test/e2e"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
atlasv2 "go.mongodb.org/atlas-sdk/v20231115007/admin"
)
func TestAtlasOrgAPIKeyAccessList(t *testing.T) {
cliPath, er := e2e.AtlasCLIBin()
require.NoError(t, er)
apiKeyID, e := createOrgAPIKey()
require.NoError(t, e)
t.Cleanup(func() {
require.NoError(t, deleteOrgAPIKey(apiKeyID))
})
n, err := e2e.RandInt(255)
require.NoError(t, err)
entry := fmt.Sprintf("192.168.0.%d", n)
t.Run("Create", func(t *testing.T) {
cmd := exec.Command(cliPath,
orgEntity,
apiKeysEntity,
apiKeyAccessListEntity,
"create",
"--apiKey",
apiKeyID,
"--ip",
entry,
"-o=json")
cmd.Env = os.Environ()
resp, err := cmd.CombinedOutput()
require.NoError(t, err, string(resp))
var key atlasv2.PaginatedApiUserAccessList
require.NoError(t, json.Unmarshal(resp, &key))
assert.NotEmpty(t, key.Results)
})
t.Run("List", func(t *testing.T) {
cmd := exec.Command(cliPath,
orgEntity,
apiKeysEntity,
apiKeyAccessListEntity,
"list",
apiKeyID,
"-o=json")
cmd.Env = os.Environ()
resp, err := cmd.CombinedOutput()
require.NoError(t, err, string(resp))
var key atlasv2.PaginatedApiUserAccessList
require.NoError(t, json.Unmarshal(resp, &key))
assert.NotEmpty(t, key.Results)
})
t.Run("Delete", func(t *testing.T) {
deleteAtlasAccessListEntry(t, cliPath, entry, apiKeyID)
})
t.Run("Create Current IP", func(t *testing.T) {
cmd := exec.Command(cliPath,
orgEntity,
apiKeysEntity,
apiKeyAccessListEntity,
"create",
"--apiKey",
apiKeyID,
"--currentIp",
"-o=json")
cmd.Env = os.Environ()
resp, err := cmd.CombinedOutput()
require.NoError(t, err, string(resp))
var key atlasv2.PaginatedApiUserAccessList
require.NoError(t, json.Unmarshal(resp, &key))
assert.NotEmpty(t, key.Results)
entry = *key.GetResults()[0].IpAddress
})
t.Run("Delete", func(t *testing.T) {
deleteAtlasAccessListEntry(t, cliPath, entry, apiKeyID)
})
}
func deleteAtlasAccessListEntry(t *testing.T, cliPath, entry, apiKeyID string) {
t.Helper()
cmd := exec.Command(cliPath,
orgEntity,
apiKeysEntity,
apiKeyAccessListEntity,
"rm",
entry,
"--apiKey",
apiKeyID,
"--force")
cmd.Env = os.Environ()
resp, err := cmd.CombinedOutput()
require.NoError(t, err, string(resp))
expected := fmt.Sprintf("Access list entry '%s' deleted\n", entry)
assert.Equal(t, expected, string(resp))
}