Skip to content

Commit

Permalink
[CAPPL-471] Add more tests to verify that panic is handled (#1003)
Browse files Browse the repository at this point in the history
  • Loading branch information
cedric-cordenier authored Jan 17, 2025
1 parent 1922eef commit 2b05726
Showing 1 changed file with 61 additions and 9 deletions.
70 changes: 61 additions & 9 deletions pkg/workflows/secrets/secrets_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,21 @@ func TestEncryptDecrypt(t *testing.T) {
_, err = DecryptSecretsForNode(overriddenResult, k2, workflowOwner)
assert.ErrorContains(t, err, "cannot find secrets blob")
})
}

func TestEncrypt_MalformedPayload(t *testing.T) {
k, err := newKey()
require.NoError(t, err)

results := EncryptedSecretsResult{
EncryptedSecrets: nil,
Metadata: Metadata{
NodePublicEncryptionKeys: nil,
EnvVarsAssignedToNodes: nil,
},
}
_, err = DecryptSecretsForNode(results, k, "owner")
require.Error(t, err)
}

func TestValidateEncryptedSecrets(t *testing.T) {
Expand All @@ -228,15 +242,16 @@ func TestValidateEncryptedSecrets(t *testing.T) {
}

// Serialize the valid input
validData, _ := json.Marshal(validInput)
validData, err := json.Marshal(validInput)
require.NoError(t, err)

// Define test cases
tests := []struct {
name string
inputData []byte
encryptionPublicKeys map[string][32]byte
workflowOwner string
shouldError bool
errMsg string
}{
{
name: "Valid input",
Expand All @@ -245,16 +260,15 @@ func TestValidateEncryptedSecrets(t *testing.T) {
encryptionPublicKeys: map[string][32]byte{
"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": {1, 2, 3},
},
shouldError: false,
},
{
name: "Invalid base64 encoded secret",
inputData: []byte(`{"encryptedSecrets": {"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": "invalid-base64!"}}`),
inputData: []byte(`{"encryptedSecrets": {"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": "invalid-base64!"}, "metadata": {"workflowOwner": "correctOwner"}}`),
workflowOwner: "correctOwner",
encryptionPublicKeys: map[string][32]byte{
"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": {1, 2, 3},
},
shouldError: true,
errMsg: "the encrypted secrets JSON payload contains encrypted secrets which are not in base64 format",
},
{
name: "Missing public key",
Expand All @@ -263,7 +277,7 @@ func TestValidateEncryptedSecrets(t *testing.T) {
encryptionPublicKeys: map[string][32]byte{
"some-other-id": {1, 2, 3},
},
shouldError: true,
errMsg: "encryption key not found",
},
{
name: "Mismatched workflow owner",
Expand All @@ -272,16 +286,54 @@ func TestValidateEncryptedSecrets(t *testing.T) {
encryptionPublicKeys: map[string][32]byte{
"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": {1, 2, 3},
},
shouldError: true,
errMsg: "the workflow owner in the encrypted secrets metadata: correctOwner does not match the input workflow owner: incorrectOwner",
},
{
name: "Invalid input",
inputData: []byte("{}"),
workflowOwner: "incorrectOwner",
encryptionPublicKeys: map[string][32]byte{
"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": {1, 2, 3},
},
errMsg: "the workflow owner in the encrypted secrets metadata: does not match the input workflow owner: incorrectOwner",
},
{
name: "Empty encryptedSecrets -- doesn't panic",
inputData: []byte(`{"encryptedSecrets": null, "metadata": {"workflowOwner": "correctOwner"}}`),
workflowOwner: "correctOwner",
encryptionPublicKeys: map[string][32]byte{
"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": {1, 2, 3},
},
errMsg: "",
},
{
name: "invalid nodePublicEncryptionKeys",
inputData: []byte(`{"encryptedSecrets": null, "metadata": {"workflowOwner": "correctOwner", "nodePublicEncryptionKeys": 100}}`),
workflowOwner: "correctOwner",
encryptionPublicKeys: map[string][32]byte{
"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": {1, 2, 3},
},
errMsg: "cannot unmarshal number into Go struct field",
},
{
name: "empty encryptedSecrets",
inputData: []byte(`{"encryptedSecrets": null, "metadata": {"workflowOwner": "correctOwner"}}`),
workflowOwner: "correctOwner",
encryptionPublicKeys: map[string][32]byte{
"09ca39cd924653c72fbb0e458b629c3efebdad3e29e7cd0b5760754d919ed829": {1, 2, 3},
},
errMsg: "",
},
}

// Run the test cases
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
err := ValidateEncryptedSecrets(test.inputData, test.encryptionPublicKeys, test.workflowOwner)
if (err != nil) != test.shouldError {
t.Errorf("Expected error: %v, got: %v", test.shouldError, err != nil)
if test.errMsg == "" {
require.NoError(t, err)
} else {
require.ErrorContains(t, err, test.errMsg)
}
})
}
Expand Down

0 comments on commit 2b05726

Please sign in to comment.