github.com/tommi2day/gomodules/pwlib@v0.0.0-20230217211148-82cdbcf0a79d/get_password_test.go (about)

     1  package pwlib
     2  
     3  import (
     4  	"github.com/tommi2day/gomodules/common"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  const plain = `
    13  # Testfile
    14  !default:defuser2:failure
    15  !default:testuser:default
    16  test:testuser:testpass
    17  testdp:testuser:xxx:yyy
    18  !default:defuser2:default
    19  !default:testuser:failure
    20  !default:defuser:default
    21  `
    22  
    23  func TestCrypt(t *testing.T) {
    24  	// prepare
    25  	methods := []string{typeGO, typeOpenssl}
    26  	for _, m := range methods {
    27  		app := "test_encrypt_" + m
    28  		SetConfig(app, TestData, TestData, app, m)
    29  
    30  		err := os.Chdir(TestDir)
    31  		require.NoErrorf(t, err, "ChDir failed")
    32  		filename := PwConfig.PlainTextFile
    33  		_ = os.Remove(filename)
    34  		//nolint gosec
    35  		err = os.WriteFile(filename, []byte(plain), 0644)
    36  		require.NoErrorf(t, err, "Create testdata failed")
    37  		_, _, err = GenRsaKey(PwConfig.PubKeyFile, PwConfig.PrivateKeyFile, PwConfig.KeyPass)
    38  		require.NoErrorf(t, err, "Prepare Key failed:%s", err)
    39  
    40  		// run
    41  		t.Run("default Encrypt File method "+m, func(t *testing.T) {
    42  			err := EncryptFile()
    43  			assert.NoErrorf(t, err, "Encryption failed: %s", err)
    44  			assert.FileExists(t, PwConfig.CryptedFile)
    45  		})
    46  		t.Run("default Decrypt File method "+m, func(t *testing.T) {
    47  			plain, err := common.ReadFileByLine(PwConfig.PlainTextFile)
    48  			require.NoErrorf(t, err, "PlainTextfile %s not readable:%s", err)
    49  			expected := len(plain)
    50  			content, err := DecryptFile()
    51  			assert.NoErrorf(t, err, "Decryption failed: %s", err)
    52  			assert.NotEmpty(t, content)
    53  			actual := len(content)
    54  			assert.Equalf(t, expected, actual, "Lines misamtch exp:%d,act:%d", expected, actual)
    55  		})
    56  	}
    57  
    58  }
    59  func TestGetPassword(t *testing.T) {
    60  	// prepare
    61  	type testTableType struct {
    62  		name     string
    63  		account  string
    64  		system   string
    65  		answer   string
    66  		hasError bool
    67  	}
    68  	app := "test_get_pass"
    69  	SetConfig(app, TestData, TestData, app, typeGO)
    70  	err := os.Chdir(TestDir)
    71  	require.NoErrorf(t, err, "ChDir failed")
    72  	filename := PwConfig.PlainTextFile
    73  	_ = os.Remove(filename)
    74  	//nolint gosec
    75  	err = os.WriteFile(filename, []byte(plain), 0644)
    76  	require.NoErrorf(t, err, "Create testdata failed")
    77  	_, _, err = GenRsaKey(PwConfig.PubKeyFile, PwConfig.PrivateKeyFile, PwConfig.KeyPass)
    78  	require.NoErrorf(t, err, "Prepare Key failed:%s", err)
    79  	err = EncryptFile()
    80  	require.NoErrorf(t, err, "Encrypt Plain failed:%s", err)
    81  	_, err = ListPasswords()
    82  	require.NoErrorf(t, err, "List failed:%s", err)
    83  
    84  	// run
    85  	for _, testConfig := range []testTableType{
    86  		{
    87  			name:     "direct match",
    88  			account:  "testuser",
    89  			system:   "test",
    90  			answer:   "testpass",
    91  			hasError: false,
    92  		},
    93  		{
    94  			name:     "default 1",
    95  			account:  "defuser",
    96  			system:   "",
    97  			answer:   "default",
    98  			hasError: false,
    99  		},
   100  		{
   101  			name:     "default 2",
   102  			account:  "defuser2",
   103  			system:   "",
   104  			answer:   "default",
   105  			hasError: false,
   106  		},
   107  		{
   108  			name:     "no input",
   109  			account:  "",
   110  			system:   "",
   111  			answer:   "true",
   112  			hasError: true,
   113  		},
   114  		{
   115  			name:     "DP in Password",
   116  			account:  "testuser",
   117  			system:   "testdp",
   118  			answer:   "xxx:yyy",
   119  			hasError: false,
   120  		},
   121  	} {
   122  		t.Run(testConfig.name, func(t *testing.T) {
   123  			pass, err := GetPassword(testConfig.system, testConfig.account)
   124  			if testConfig.hasError {
   125  				assert.Error(t, err, "Expected Error not thrown")
   126  			} else {
   127  				assert.NoErrorf(t, err, "Got unexpected error: %s", err)
   128  				assert.Equal(t, testConfig.answer, pass, "Answer not expected. exp:%s,act:%s", testConfig.answer, pass)
   129  			}
   130  		})
   131  	}
   132  }