github.com/tommi2day/pwcli@v0.0.0-20240317203041-4d1177a5ab91/cmd/vault_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/tommi2day/pwcli/test"
     8  
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  	"github.com/tommi2day/gomodules/common"
    14  )
    15  
    16  func TestVault(t *testing.T) {
    17  	var err error
    18  	var out = ""
    19  	test.Testinit(t)
    20  	if os.Getenv("SKIP_VAULT") != "" {
    21  		t.Skip("Skip Vault Test in CI")
    22  		return
    23  	}
    24  	vaultContainer, err := prepareVaultContainer()
    25  	require.NoErrorf(t, err, "Ldap Server not available")
    26  	require.NotNil(t, vaultContainer, "Prepare failed")
    27  	defer common.DestroyDockerContainer(vaultContainer)
    28  
    29  	vaulthost, vaultport := common.GetContainerHostAndPort(vaultContainer, "8200/tcp")
    30  	address := fmt.Sprintf("http://%s:%d", vaulthost, vaultport)
    31  	_ = os.Setenv("VAULT_ADDR", address)
    32  	err = os.Setenv("VAULT_TOKEN", rootToken)
    33  	if err != nil {
    34  		t.Fatalf("cannot set vault environment")
    35  	}
    36  	t.Logf("ADDR=%s, Token=%s", address, rootToken)
    37  	t.Run("CMD vault write", func(t *testing.T) {
    38  		args := []string{
    39  			"vault",
    40  			"write",
    41  			"--logical=false",
    42  			"--info",
    43  			"--unit-test",
    44  			"--mount", "secret/",
    45  			"--path", "test",
    46  			"--vault_addr", address,
    47  			"--vault_token", rootToken,
    48  			"{\"password\": \"testpass\"}",
    49  		}
    50  		out, err = common.CmdRun(RootCmd, args)
    51  		require.NoErrorf(t, err, "get command should  not return an error: %s", err)
    52  		assert.Contains(t, out, "Vault Write OK", "Output should not confirm success")
    53  		t.Logf(out)
    54  	})
    55  	t.Run("CMD vault read", func(t *testing.T) {
    56  		args := []string{
    57  			"vault",
    58  			"read",
    59  			"--logical=false",
    60  			"--info",
    61  			"--unit-test",
    62  			"--mount", "secret/",
    63  			"--path", "test",
    64  			"--vault_addr", address,
    65  			"--vault_token", rootToken,
    66  			"password",
    67  		}
    68  		out, err = common.CmdRun(RootCmd, args)
    69  		require.NoErrorf(t, err, "get command should  not return an error:%s", err)
    70  		assert.Contains(t, out, "Vault Data successfully processed", "Output should confirm success")
    71  		t.Logf(out)
    72  	})
    73  	t.Run("CMD vault list", func(t *testing.T) {
    74  		args := []string{
    75  			"vault",
    76  			"list",
    77  			"--info",
    78  			"--unit-test",
    79  			"--mount", "secret/",
    80  			"--path", "/",
    81  			"--vault_addr", address,
    82  			"--vault_token", rootToken,
    83  		}
    84  		out, err = common.CmdRun(RootCmd, args)
    85  		require.NoErrorf(t, err, "list command should  not return an error:%s", err)
    86  		assert.Contains(t, out, "Vault List returned", "Output should confirm success")
    87  		t.Logf(out)
    88  	})
    89  	t.Run("CMD GetPassword Vault", func(t *testing.T) {
    90  		args := []string{
    91  			"get",
    92  			"--method", "vault",
    93  			"--info",
    94  			"--unit-test",
    95  			"--path", "secret/data/test",
    96  			"--entry", "password",
    97  			"--vault_addr", address,
    98  			"--vault_token", rootToken,
    99  		}
   100  		out, err = common.CmdRun(RootCmd, args)
   101  		require.NoErrorf(t, err, "get command should  not return an error:%s", err)
   102  		assert.Contains(t, out, "Found matching entry", "Output should confirm success")
   103  		t.Logf(out)
   104  	})
   105  }