blob: 1ab74ebc6c205b50639076b8b664f3b600761cfb [file] [edit]
// Copyright 2022 Google LLC
// 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
// https://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.
package utils
import (
"fmt"
"testing"
)
func TestGetUserKey(t *testing.T) {
pubKey := MakeRandRSAPubKey(t)
table := []struct {
key string
user string
keyVal string
haserr bool
}{
{fmt.Sprintf(`usera:ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey),
"usera", fmt.Sprintf(`ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey), false},
{fmt.Sprintf(`usera:restrict,pty ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey),
"usera", fmt.Sprintf(`restrict,pty ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey), false},
{" ", "", "", true},
{fmt.Sprintf("ssh-rsa %s", pubKey), "", "", true},
{fmt.Sprintf(":ssh-rsa %s", pubKey), "", "", true},
{"userb:", "", "", true},
{fmt.Sprintf("userc:ssh-rsa %s info text", pubKey), "userc", fmt.Sprintf("ssh-rsa %s info text", pubKey), false},
}
for _, tt := range table {
u, k, err := GetUserKey(tt.key)
e := err != nil
if u != tt.user || k != tt.keyVal || e != tt.haserr {
t.Errorf("GetUserKey(%s) incorrect return: got user: %s, key: %s, error: %v - want user: %s, key: %s, error: %v", tt.key, u, k, e, tt.user, tt.keyVal, tt.haserr)
}
}
}
func TestValidateUserKey(t *testing.T) {
pubKey := MakeRandRSAPubKey(t)
table := []struct {
user string
key string
haserr bool
}{
{"usera", fmt.Sprintf(`ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey), false},
{"user a", fmt.Sprintf(`ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey), true},
{"usera", fmt.Sprintf(`ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2021-04-23T12:34:56+0000"}`, pubKey), true},
{"usera", fmt.Sprintf(`ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"Apri 4, 2056"}`, pubKey), true},
{"usera", fmt.Sprintf(`ssh-rsa %s google-ssh`, pubKey), true},
{"usera", fmt.Sprintf(`ssh-rsa %s test info`, pubKey), false},
{"", fmt.Sprintf("ssh-rsa %s", pubKey), true},
{"usera", fmt.Sprintf(`command="echo hi" ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey), false},
{"usera", fmt.Sprintf(`command="echo hi" ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2021-04-23T12:34:56+0000"}`, pubKey), true},
{"usera", fmt.Sprintf(`restrict,pty ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey), false},
{" ", "", true},
{"userb", "", true},
}
for _, tt := range table {
err := ValidateUserKey(tt.user, tt.key)
e := err != nil
if e != tt.haserr {
t.Errorf("ValidateUserKey(%s, %s) incorrect return: expected: %t - got: %t", tt.user, tt.key, tt.haserr, e)
}
}
}
func TestCheckExpiredKey(t *testing.T) {
pubKey := MakeRandRSAPubKey(t)
table := []struct {
key string
expired bool
}{
{fmt.Sprintf(`usera:ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2095-04-23T12:34:56+0000"}`, pubKey), false},
{fmt.Sprintf(`usera:ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"2021-04-23T12:34:56+0000"}`, pubKey), true},
{fmt.Sprintf(`usera:ssh-rsa %s google-ssh {"userName":"usera@example.com","expireOn":"Apri 4, 2056"}`, pubKey), true},
{fmt.Sprintf(`usera:ssh-rsa %s google-ssh`, pubKey), true},
{" ", true},
{fmt.Sprintf("ssh-rsa %s", pubKey), false},
{fmt.Sprintf(":ssh-rsa %s", pubKey), false},
{fmt.Sprintf("usera:ssh-rsa %s", pubKey), false},
}
for _, tt := range table {
err := CheckExpiredKey(tt.key)
isExpired := err != nil
if isExpired != tt.expired {
t.Errorf("CheckExpiredKey(%s) incorrect return: expired: %t - want expired: %t, got err: %v", tt.key, isExpired, tt.expired, err)
}
}
}
func TestValidateUser(t *testing.T) {
table := []struct {
user string
valid bool
}{
{"username", true},
{"username:key", true},
{"user -g", false},
{"user -g 27", false},
{"user\t-g", false},
{"user\n-g", false},
{"username\t-g\n27", false},
}
for _, tt := range table {
err := ValidateUser(tt.user)
isValid := err == nil
if isValid != tt.valid {
t.Errorf("ValidateUser(%s) incorrect return: expected: %t - got: %t", tt.user, tt.valid, isValid)
}
}
}