github.com/leg100/ots@v0.0.7-0.20210919080622-034055ced4bd/cmd/ots/credentials_store_test.go (about)

     1  package main
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestCredentialsStore(t *testing.T) {
    13  	tmpdir := t.TempDir()
    14  
    15  	store, err := NewCredentialsStore(FakeDirectories(tmpdir))
    16  	require.NoError(t, err)
    17  
    18  	require.NoError(t, store.Save("ots.dev:8080", "dummy"))
    19  
    20  	token, err := store.Load("ots.dev:8080")
    21  	require.NoError(t, err)
    22  
    23  	assert.Equal(t, "dummy", token)
    24  }
    25  
    26  func TestCredentialsStoreWithExistingCredentials(t *testing.T) {
    27  	// Write a config file with existing creds for TFC
    28  	existing := `{
    29       "credentials": {
    30         "app.terraform.io": {
    31           "token": "secret"
    32         }
    33       }
    34     }
    35  `
    36  	tmpdir := t.TempDir()
    37  
    38  	path := filepath.Join(tmpdir, CredentialsPath)
    39  	require.NoError(t, os.MkdirAll(filepath.Dir(path), 0755))
    40  	require.NoError(t, os.WriteFile(path, []byte(existing), 0600))
    41  
    42  	store, err := NewCredentialsStore(FakeDirectories(tmpdir))
    43  	require.NoError(t, err)
    44  
    45  	require.NoError(t, store.Save("ots.dev:8080", "dummy"))
    46  
    47  	got, err := os.ReadFile(path)
    48  	require.NoError(t, err)
    49  
    50  	want := `{
    51    "credentials": {
    52      "app.terraform.io": {
    53        "token": "secret"
    54      },
    55      "ots.dev:8080": {
    56        "token": "dummy"
    57      }
    58    }
    59  }`
    60  
    61  	assert.Equal(t, want, string(got))
    62  }
    63  
    64  func TestCredentialsStoreSanitizeAddress(t *testing.T) {
    65  	tests := []struct {
    66  		name    string
    67  		address string
    68  		want    string
    69  	}{
    70  		{
    71  			name:    "no scheme",
    72  			address: "localhost:8080",
    73  			want:    "localhost:8080",
    74  		},
    75  		{
    76  			name:    "has scheme",
    77  			address: "https://localhost:8080",
    78  			want:    "localhost:8080",
    79  		},
    80  	}
    81  	for _, tt := range tests {
    82  		t.Run(tt.name, func(t *testing.T) {
    83  			tmpdir := t.TempDir()
    84  
    85  			store, err := NewCredentialsStore(FakeDirectories(tmpdir))
    86  			require.NoError(t, err)
    87  
    88  			address, err := store.sanitizeHostname(tt.address)
    89  			require.NoError(t, err)
    90  			assert.Equal(t, tt.want, address)
    91  		})
    92  	}
    93  }
    94  
    95  type FakeDirectories string
    96  
    97  func (f FakeDirectories) UserHomeDir() (string, error) { return string(f), nil }