Files
atlantis/server/events/vcs/github_token_rotator_test.go
2024-11-04 23:14:59 +00:00

87 lines
2.4 KiB
Go

package vcs_test
import (
"fmt"
"os"
"path/filepath"
"testing"
"time"
"github.com/runatlantis/atlantis/server/events/vcs"
"github.com/runatlantis/atlantis/server/events/vcs/testdata"
"github.com/runatlantis/atlantis/server/logging"
. "github.com/runatlantis/atlantis/testing"
)
func Test_githubTokenRotator_GenerateJob(t *testing.T) {
logger := logging.NewNoopLogger(t)
defer disableSSLVerification()()
testServer, err := testdata.GithubAppTestServer(t)
Ok(t, err)
anonCreds := &vcs.GithubAnonymousCredentials{}
anonClient, err := vcs.NewGithubClient(testServer, anonCreds, vcs.GithubConfig{}, 0, logging.NewNoopLogger(t))
Ok(t, err)
tempSecrets, err := anonClient.ExchangeCode(logger, "good-code")
Ok(t, err)
type fields struct {
githubCredentials vcs.GithubCredentials
}
tests := []struct {
name string
fields fields
credsFileWritten bool
wantErr bool
}{
{
name: "Should write .git-credentials file on start",
fields: fields{&vcs.GithubAppCredentials{
AppID: tempSecrets.ID,
Key: []byte(testdata.GithubPrivateKey),
Hostname: testServer,
}},
credsFileWritten: true,
wantErr: false,
},
{
name: "Should return an error if pem data is missing or wrong",
fields: fields{&vcs.GithubAppCredentials{
AppID: tempSecrets.ID,
Key: []byte("some bad formatted pem key"),
Hostname: testServer,
}},
credsFileWritten: false,
wantErr: true,
},
{
name: "Should return an error if app id is missing or wrong",
fields: fields{&vcs.GithubAppCredentials{
AppID: 3819,
Key: []byte(testdata.GithubPrivateKey),
Hostname: testServer,
}},
credsFileWritten: false,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tmpDir := t.TempDir()
t.Setenv("HOME", tmpDir)
r := vcs.NewGithubTokenRotator(logging.NewNoopLogger(t), tt.fields.githubCredentials, testServer, "x-access-token", tmpDir)
got, err := r.GenerateJob()
if (err != nil) != tt.wantErr {
t.Errorf("githubTokenRotator.GenerateJob() error = %v, wantErr %v", err, tt.wantErr)
return
}
if tt.credsFileWritten {
credsFileContent := fmt.Sprintf(`https://x-access-token:some-token@%s`, testServer)
actContents, err := os.ReadFile(filepath.Join(tmpDir, ".git-credentials"))
Ok(t, err)
Equals(t, credsFileContent, string(actContents))
}
Equals(t, 30*time.Second, got.Period)
})
}
}