mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-27 23:09:08 +01:00
53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
package nmdata
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/netbirdio/netbird/shared/management/certposture"
|
|
"github.com/netbirdio/netbird/shared/management/certposture/certtest"
|
|
)
|
|
|
|
func TestCertificateCheck_Check(t *testing.T) {
|
|
ca := certtest.NewCA(t, "corp-root")
|
|
otherCA := certtest.NewCA(t, "other-root")
|
|
chain := certposture.EncodeChainPEM([]*x509.Certificate{ca.Issue(t, certtest.ECDSAKey(t), "device")})
|
|
|
|
c := bundle(ChecksDefinition{CertificateCheck: &CertificateCheck{CACertificates: []string{ca.PEM}}})
|
|
without := &Peer{}
|
|
with := &Peer{Meta: PeerSystemMeta{Certificates: []string{chain}}}
|
|
|
|
assert.False(t, c[0].Passes(without))
|
|
assert.True(t, c[0].Passes(with))
|
|
assert.True(t, PostureVerdictChanged(c, without, with))
|
|
|
|
otherOnly := bundle(ChecksDefinition{CertificateCheck: &CertificateCheck{CACertificates: []string{otherCA.PEM}}})
|
|
assert.False(t, otherOnly[0].Passes(with))
|
|
}
|
|
|
|
func TestCertificateCheck_ReusesParsedCAs(t *testing.T) {
|
|
ca := certtest.NewCA(t, "corp-root")
|
|
chain := certposture.EncodeChainPEM([]*x509.Certificate{ca.Issue(t, certtest.ECDSAKey(t), "device")})
|
|
with := &Peer{Meta: PeerSystemMeta{Certificates: []string{chain}}}
|
|
|
|
check := &CertificateCheck{CACertificates: []string{ca.PEM}}
|
|
for range 3 {
|
|
valid, err := check.check(with)
|
|
assert.NoError(t, err)
|
|
assert.True(t, valid)
|
|
}
|
|
|
|
invalid := &CertificateCheck{CACertificates: []string{"not a pem"}}
|
|
for range 2 {
|
|
valid, err := invalid.check(with)
|
|
assert.ErrorIs(t, err, certposture.ErrNoCertificateInPEM)
|
|
assert.False(t, valid)
|
|
}
|
|
|
|
valid, err := invalid.check(&Peer{})
|
|
assert.NoError(t, err)
|
|
assert.False(t, valid, "a peer without certificates fails before the CAs are parsed")
|
|
}
|