mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-19 20:09:07 +02:00
42 lines
1.5 KiB
Go
42 lines
1.5 KiB
Go
package certproof
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var errNeedsApprovalForTest = errors.New("key needs approval")
|
|
|
|
// TestSignAttempts_FallsThroughToTheNextIdentity: a certificate can sit in a keychain with
|
|
// more than one key, of which only some can sign. A failure moves on, and an identity that
|
|
// signs ends the search without reporting the earlier failure.
|
|
func TestSignAttempts_FallsThroughToTheNextIdentity(t *testing.T) {
|
|
var attempts signAttempts
|
|
|
|
signature, ok := attempts.try(func() ([]byte, error) { return nil, errNeedsApprovalForTest })
|
|
assert.False(t, ok, "a failing identity does not end the search")
|
|
assert.Nil(t, signature)
|
|
|
|
signature, ok = attempts.try(func() ([]byte, error) { return []byte("sig"), nil })
|
|
require.True(t, ok, "the next identity signs")
|
|
assert.Equal(t, []byte("sig"), signature)
|
|
}
|
|
|
|
// TestSignAttempts_KeepsEveryFailure: when no identity signs, the approval a user has to
|
|
// give must not be hidden behind the failure of a later identity.
|
|
func TestSignAttempts_KeepsEveryFailure(t *testing.T) {
|
|
var attempts signAttempts
|
|
assert.NoError(t, attempts.err(), "no attempts, no error")
|
|
|
|
attempts.try(func() ([]byte, error) { return nil, errNeedsApprovalForTest })
|
|
attempts.try(func() ([]byte, error) { return nil, errors.New("key is gone") })
|
|
|
|
err := attempts.err()
|
|
require.Error(t, err)
|
|
assert.ErrorIs(t, err, errNeedsApprovalForTest, "the earlier approval error survives the later failure")
|
|
assert.ErrorContains(t, err, "key is gone")
|
|
}
|