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 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
package integration
import (
"context"
"testing"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/linode/linodego"
. "github.com/linode/linodego"
)
const usernamePrefix = "linodegotest-"
var ignoreUserTimestampes = cmpopts.IgnoreFields(linodego.User{}, "PasswordCreated")
type userModifier func(*linodego.UserCreateOptions)
func TestUser_GetMissing(t *testing.T) {
client, teardown := createTestClient(t, "fixtures/TestUser_GetMissing")
defer teardown()
i, err := client.GetUser(context.Background(), "does-not-exist")
if err == nil {
t.Errorf("should have received an error requesting a missing user, got %v", i)
}
e, ok := err.(*Error)
if !ok {
t.Errorf("should have received an Error requesting a missing user, got %v", e)
}
if e.Code != 404 {
t.Errorf("should have received a 404 Code requesting a missing user, got %v", e.Code)
}
}
func TestUser_Get_smoke(t *testing.T) {
username := usernamePrefix + "getuser"
email := usernamePrefix + "getuser@example.com"
restricted := true
client, _, teardown := setupUser(t, []userModifier{
func(createOpts *linodego.UserCreateOptions) {
createOpts.Username = username
createOpts.Email = email
createOpts.Restricted = restricted
},
}, "fixtures/TestUser_Get")
defer teardown()
user, err := client.GetUser(context.TODO(), username)
if err != nil {
t.Fatalf("failed to get user (%s): %s", username, err)
}
if user.Email != email {
t.Errorf("expected user email to be %s; got %s", email, user.Email)
}
if len(user.SSHKeys) != 0 {
t.Error("expected user to have no SSH keys")
}
if !user.Restricted {
t.Error("expected user to be restricted")
}
if user.TFAEnabled {
t.Error("expected TFA is disabled")
}
if user.VerifiedPhoneNumber != nil {
t.Error("expected phone number is not set")
}
if user.UserType == "" {
t.Errorf("expected user type, got none")
}
}
func TestUser_Update(t *testing.T) {
username := usernamePrefix + "updateuser"
email := usernamePrefix + "updateuser@example.com"
restricted := false
client, user, teardown := setupUser(t, []userModifier{
func(createOpts *linodego.UserCreateOptions) {
createOpts.Username = username
createOpts.Email = email
createOpts.Restricted = restricted
},
}, "fixtures/TestUser_Update")
defer teardown()
updatedUsername := username + "-updated"
restricted = true
updateOpts := UserUpdateOptions{
Username: updatedUsername,
Restricted: &restricted,
}
updated, err := client.UpdateUser(context.TODO(), username, updateOpts)
if err != nil {
t.Fatalf("failed to update user (%s): %s", username, err)
}
// update username to be deleted in teardown
user.Username = updatedUsername
if updated.Username != updatedUsername {
t.Errorf("expected username to be %s; got %s", updatedUsername, updated.Username)
}
if !updated.Restricted {
t.Error("expected user to be restricted")
}
}
func TestUsers_List(t *testing.T) {
username := usernamePrefix + "listuser"
email := usernamePrefix + "listuser@example.com"
restricted := false
client, _, teardown := setupUser(t, []userModifier{
func(createOpts *linodego.UserCreateOptions) {
createOpts.Username = username
createOpts.Email = email
createOpts.Restricted = restricted
},
}, "fixtures/TestUsers_List")
defer teardown()
users, err := client.ListUsers(context.TODO(), nil)
if err != nil {
t.Fatalf("failed to get users: %s", err)
}
if len(users) == 0 {
t.Fatalf("expected at least one user to be returned")
}
var newUser User
for _, user := range users {
if user.Username == username {
newUser = user
}
}
if newUser.Email != email {
t.Errorf("expected user email to be %s; got %s", email, newUser.Email)
}
if len(newUser.SSHKeys) != 0 {
t.Error("expected user to have no SSH keys")
}
if newUser.Restricted {
t.Error("expected user to not be restricted")
}
if newUser.TFAEnabled {
t.Error("expected TFA is disabled")
}
if newUser.VerifiedPhoneNumber != nil {
t.Error("expected phone number is not set")
}
if newUser.UserType == "" {
t.Errorf("expected user type, got none")
}
}
func createUser(t *testing.T, client *linodego.Client, userModifiers ...userModifier) (*User, func()) {
t.Helper()
var createOpts UserCreateOptions
for _, modifier := range userModifiers {
modifier(&createOpts)
}
user, err := client.CreateUser(context.TODO(), createOpts)
if err != nil {
t.Fatalf("failed to create test user: %s", err)
}
return user, func() {
if err := client.DeleteUser(context.TODO(), user.Username); err != nil {
t.Errorf("failed to delete test user (%s): %s", user.Username, err)
}
}
}
func setupUser(t *testing.T, userModifiers []userModifier, fixturesYaml string) (*Client, *User, func()) {
t.Helper()
client, fixtureTeardown := createTestClient(t, fixturesYaml)
user, teardown := createUser(t, client, userModifiers...)
return client, user, func() {
teardown()
fixtureTeardown()
}
}
|