github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/pkg/secret/secret_test.go (about)

     1  package secret_test
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/kubri/kubri/pkg/secret"
    11  )
    12  
    13  func TestSecrets(t *testing.T) {
    14  	tests := []string{"ConfigDir", "Path", "SecretPath"}
    15  
    16  	key := "my_secret"
    17  	data := []byte("secret data")
    18  
    19  	dir := t.TempDir()
    20  	for _, v := range []string{"XDG_CONFIG_HOME", "HOME", "AppData"} {
    21  		t.Setenv(v, dir) // Override config dir.
    22  	}
    23  	os.MkdirAll(filepath.Join(dir, "Library", "Application Support"), 0o755) // Create MacOS/iOS config dir.
    24  
    25  	for _, test := range tests {
    26  		t.Run(test, func(t *testing.T) {
    27  			switch test {
    28  			case "ConfigDir":
    29  				t.Setenv("KUBRI_PATH", "")
    30  			case "Path":
    31  				t.Setenv("KUBRI_PATH", dir)
    32  			case "SecretPath":
    33  				t.Setenv("KUBRI_MY_SECRET_PATH", filepath.Join(dir, "my-secret-file"))
    34  			}
    35  
    36  			if _, err := secret.Get(key); err == nil {
    37  				t.Fatalf("want error %q got %q", secret.ErrKeyNotFound, err)
    38  			}
    39  
    40  			if err := secret.Delete(key); err == nil {
    41  				t.Fatalf("want error %q got %q", secret.ErrKeyNotFound, err)
    42  			}
    43  
    44  			if err := secret.Put(key, data); err != nil {
    45  				t.Fatal(err)
    46  			}
    47  
    48  			if err := secret.Put(key, data); !errors.Is(err, secret.ErrKeyExists) {
    49  				t.Fatalf("want error %q got %q", secret.ErrKeyExists, err)
    50  			}
    51  
    52  			got, err := secret.Get(key)
    53  			if err != nil {
    54  				t.Fatal(err)
    55  			}
    56  			if !bytes.Equal(data, got) {
    57  				t.Fatal("should be equal")
    58  			}
    59  
    60  			if err := secret.Delete(key); err != nil {
    61  				t.Fatal(err)
    62  			}
    63  		})
    64  	}
    65  
    66  	t.Run("Env", func(t *testing.T) {
    67  		t.Setenv("KUBRI_MY_SECRET", string(data))
    68  
    69  		got, err := secret.Get(key)
    70  		if err != nil {
    71  			t.Fatal(err)
    72  		}
    73  		if !bytes.Equal(data, got) {
    74  			t.Fatal("should be equal")
    75  		}
    76  
    77  		if err = secret.Put(key, data); !errors.Is(err, secret.ErrEnvironment) {
    78  			t.Fatalf("want error %q got %q", secret.ErrEnvironment, err)
    79  		}
    80  
    81  		if err = secret.Delete(key); !errors.Is(err, secret.ErrEnvironment) {
    82  			t.Fatalf("want error %q got %q", secret.ErrEnvironment, err)
    83  		}
    84  	})
    85  }