mirror of https://github.com/docker/docs.git
Added tests for X509MemStore and fixtures
This commit is contained in:
parent
181a453adc
commit
d39d16a717
|
@ -0,0 +1,35 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,32 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
Ns20srByc59Ipw==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,30 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFMDCCAxigAwIBAgIBATANBgkqhkiG9w0BAQsFADBXMRIwEAYDVQQDEwlEb2Nr
|
||||||
|
ZXIgQ0ExCzAJBgNVBAYTAlVTMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ8wDQYD
|
||||||
|
VQQKEwZEb2NrZXIxCzAJBgNVBAgTAkNBMB4XDTE1MDYxMzA1MzA0NloXDTE2MDYx
|
||||||
|
MjA1MzA0NlowXzEaMBgGA1UEAxMRc2VjdXJlLmRvY2tlci5jb20xCzAJBgNVBAYT
|
||||||
|
AlVTMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ8wDQYDVQQKEwZEb2NrZXIxCzAJ
|
||||||
|
BgNVBAgTAkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6eU6sCT2
|
||||||
|
i8u57I5VLmpa3Hq1Vbkd5Xhn1eeLOhTuYZ2mPdmvDk9Ro1Kiu5bqrckSNJccgqo8
|
||||||
|
Ai436JS3/i1Gt+LkcYMYNv2ahezT3ID0fVzx4Ow9uDkxSl28FBIRUO66itjWtEF5
|
||||||
|
ENMDmHkRp6+BhZ+Eu20OQlqtGvdO5azBYQAo19JyctA0pyU7o1rAVLllDGdCMAc1
|
||||||
|
HP6ZsdYYIi8jUGLYloGlUq9AIGmkAQoM9APxvLANPm95iQwPB1Orm9x6vBAFsKBe
|
||||||
|
/Q6zW6UKziBJwpAujKPkFMe1VKXTZQZgeNSFQh7QMJUJgR9Eu0pSKKZf8W5xpCXq
|
||||||
|
dpL47pvdNNSIAwIDAQABo4H+MIH7MH8GA1UdIwR4MHaAFJZkZZH1bZHSIMIvFatZ
|
||||||
|
BWikVHRXoVukWTBXMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcT
|
||||||
|
DVNhbiBGcmFuY2lzY28xDzANBgNVBAoTBkRvY2tlcjESMBAGA1UEAxMJRG9ja2Vy
|
||||||
|
IENBggEBMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
|
||||||
|
BwMBMA4GA1UdDwEB/wQEAwIFoDAcBgNVHREEFTATghFzZWN1cmUuZG9ja2VyLmNv
|
||||||
|
bTAdBgNVHQ4EFgQUt+4JSPFbGr5suuQ+iCn1WW4KcVQwDQYJKoZIhvcNAQELBQAD
|
||||||
|
ggIBABGUsCFrA7fuXDrMplTD/QXCJ9znsbkoQm9vHI8MJ+A6xx1NhLO7ErsnN4kf
|
||||||
|
L2vwjGs2bv5lZB2OFCDsAhLe49OQg4gOcvxt2urlpb3+veaEbcIicoXgwBYi6ayI
|
||||||
|
KqVEOggK06hxaqXZuxw9zeFNtzHfD8HMpe+E1uHDt47EzAbFi+pvAw26sBL1lUgn
|
||||||
|
5MElV5BrigO6AgiLuueF5omXBU8xVbmSXnvlTlAO5tbBexeIm8L3iFJaxzyuZna/
|
||||||
|
1LTUvBbGFK5IZWha6lisP9I8Id5Yc42eolTA2SThdP/H4oI0nWbHxPlj0Qkbhuaj
|
||||||
|
3zVuybJNQP881T7AQ9DdZx1fb0RWzPYNs2lVA8Q23RXeUBOzPfdD4Xo3dpZc/DR7
|
||||||
|
2ibtx2qo+ONqsQbMPIfBXYTNPwXcKwXAOaPuOIfECyIAik6s8COU0RprImMASS9R
|
||||||
|
kpJKn+1S96j/J50FKNbQyzJ/5xWtl4FofFULx0SoHN9sZvOLmCMVyioR+qmoQg2X
|
||||||
|
OGcqJFqExZtlsDaM+q9PbK7J5jQJuALqCI14JNHt+3Ic1vII7uKRUq5x0rz0J+GJ
|
||||||
|
I4ZPo0Hxzba/X4dSVNNwaMcpcs/G7qXKVYHEyDOkh5MGXVSkhmGnsJL9jGgRp3w9
|
||||||
|
Whe7YpsTs/IEzO95FHevp9tV7zUNaWdlUnLHpP4vPa6TIqAG
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,30 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,269 @@
|
||||||
|
package trustmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"crypto/x509"
|
||||||
|
"encoding/hex"
|
||||||
|
"encoding/pem"
|
||||||
|
"io/ioutil"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/vetinari/trustmanager"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAddCert(t *testing.T) {
|
||||||
|
// Read certificate from file
|
||||||
|
b, err := ioutil.ReadFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't load fixture: %v", err)
|
||||||
|
}
|
||||||
|
// Decode PEM block
|
||||||
|
var block *pem.Block
|
||||||
|
block, _ = pem.Decode(b)
|
||||||
|
|
||||||
|
// Load X509 Certificate
|
||||||
|
cert, err := x509.ParseCertificate(block.Bytes)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't parse certificate: %v", err)
|
||||||
|
}
|
||||||
|
// Create a Store and add the certificate to it
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err = store.AddCert(cert)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate: %v", err)
|
||||||
|
}
|
||||||
|
// Retrieve all the certificates
|
||||||
|
certs := store.GetCertificates()
|
||||||
|
// Check to see if certificate is present and total number of certs is correct
|
||||||
|
numCerts := len(certs)
|
||||||
|
if numCerts != 1 {
|
||||||
|
t.Fatalf("unexpected number of certificates in store: %d", numCerts)
|
||||||
|
}
|
||||||
|
if certs[0] != cert {
|
||||||
|
t.Fatalf("expected certificates to be the same")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddCertFromFile(t *testing.T) {
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err := store.AddCertFromFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from file: %v", err)
|
||||||
|
}
|
||||||
|
numCerts := len(store.GetCertificates())
|
||||||
|
if numCerts != 1 {
|
||||||
|
t.Fatalf("unexpected number of certificates in store: %d", numCerts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddCertFromPEM(t *testing.T) {
|
||||||
|
b, err := ioutil.ReadFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't load fixture: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err = store.AddCertFromPEM(b)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from PEM: %v", err)
|
||||||
|
}
|
||||||
|
numCerts := len(store.GetCertificates())
|
||||||
|
if numCerts != 1 {
|
||||||
|
t.Fatalf("unexpected number of certificates in store: %d", numCerts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// (diogo): Mock GET request and create test for AddCertFromURL
|
||||||
|
func TestAddCertFromURL(t *testing.T) {
|
||||||
|
t.Skip("")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRemoveCert(t *testing.T) {
|
||||||
|
b, err := ioutil.ReadFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't load fixture: %v", err)
|
||||||
|
}
|
||||||
|
var block *pem.Block
|
||||||
|
block, _ = pem.Decode(b)
|
||||||
|
|
||||||
|
cert, err := x509.ParseCertificate(block.Bytes)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't parse certificate: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err = store.AddCert(cert)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Number of certificates should be 1 since we added the cert
|
||||||
|
numCerts := len(store.GetCertificates())
|
||||||
|
if numCerts != 1 {
|
||||||
|
t.Fatalf("unexpected number of certificates in store: %d", numCerts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the cert from the store
|
||||||
|
err = store.RemoveCert(cert)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to remove certificate: %v", err)
|
||||||
|
}
|
||||||
|
// Number of certificates should be 0 since we added and removed the cert
|
||||||
|
numCerts = len(store.GetCertificates())
|
||||||
|
if numCerts != 0 {
|
||||||
|
t.Fatalf("unexpected number of certificates in store: %d", numCerts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInexistentGetCertificateBySKID(t *testing.T) {
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err := store.AddCertFromFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = store.GetCertificateBySKID("4d06afd30b8bed131d2a84c97d00b37f422021598bfae34285ce98e77b708b5a")
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("no error returned for inexistent certificate")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetCertificateBySKID(t *testing.T) {
|
||||||
|
b, err := ioutil.ReadFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't load fixture: %v", err)
|
||||||
|
}
|
||||||
|
var block *pem.Block
|
||||||
|
block, _ = pem.Decode(b)
|
||||||
|
|
||||||
|
cert, err := x509.ParseCertificate(block.Bytes)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't parse certificate: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err = store.AddCert(cert)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from PEM: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate SHA256 fingerprint for cert
|
||||||
|
fingerprintBytes := sha256.Sum256(cert.Raw)
|
||||||
|
certFingerprint := hex.EncodeToString(fingerprintBytes[:])
|
||||||
|
|
||||||
|
// Tries to retreive cert by Subject Key IDs
|
||||||
|
_, err = store.GetCertificateBySKID(certFingerprint)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("expected certificate in store: %s", certFingerprint)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetVerifyOpsErrorsWithoutCerts(t *testing.T) {
|
||||||
|
// Create empty Store
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
|
||||||
|
// Try to get VerifyOptions without certs added
|
||||||
|
_, err := store.GetVerifyOptions("docker.com")
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("expecting an error when getting empty VerifyOptions")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestVerifyLeafCertFromIntermediate(t *testing.T) {
|
||||||
|
// Create a store and add a root
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err := store.AddCertFromFile("../fixtures/trustmanager/ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the VerifyOptions from our Store
|
||||||
|
opts, err := store.GetVerifyOptions("secure.docker.com")
|
||||||
|
|
||||||
|
// Get leaf certificate
|
||||||
|
b, err := ioutil.ReadFile("../fixtures/trustmanager/secure.docker.com.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't load fixture: %v", err)
|
||||||
|
}
|
||||||
|
var block *pem.Block
|
||||||
|
block, _ = pem.Decode(b)
|
||||||
|
|
||||||
|
cert, err := x509.ParseCertificate(block.Bytes)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't parse certificate: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to find a valid chain for cert
|
||||||
|
_, err = cert.Verify(opts)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't find a valid chain for this certificate: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestVerifyIntermediateFromRoot(t *testing.T) {
|
||||||
|
// Create a store and add a root
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err := store.AddCertFromFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the VerifyOptions from our Store
|
||||||
|
opts, err := store.GetVerifyOptions("Docker CA")
|
||||||
|
|
||||||
|
// Get leaf certificate
|
||||||
|
b, err := ioutil.ReadFile("../fixtures/trustmanager/ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't load fixture: %v", err)
|
||||||
|
}
|
||||||
|
var block *pem.Block
|
||||||
|
block, _ = pem.Decode(b)
|
||||||
|
|
||||||
|
cert, err := x509.ParseCertificate(block.Bytes)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't parse certificate: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to find a valid chain for cert
|
||||||
|
_, err = cert.Verify(opts)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("couldn't find a valid chain for this certificate: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewX509FilteredMemStore(t *testing.T) {
|
||||||
|
store := trustmanager.NewX509FilteredMemStore(func(cert *x509.Certificate) bool {
|
||||||
|
return cert.IsCA
|
||||||
|
})
|
||||||
|
|
||||||
|
// AddCert should succeed because this is a CA being added
|
||||||
|
err := store.AddCertFromFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from file: %v", err)
|
||||||
|
}
|
||||||
|
numCerts := len(store.GetCertificates())
|
||||||
|
if numCerts != 1 {
|
||||||
|
t.Fatalf("unexpected number of certificates in store: %d", numCerts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddCert should fail because this is a leaf cert being added
|
||||||
|
err = store.AddCertFromFile("../fixtures/trustmanager/secure.docker.com.crt")
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("was expecting non-CA certificate to be rejected")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetCertificatePool(t *testing.T) {
|
||||||
|
// Create a store and add a root
|
||||||
|
store := trustmanager.NewX509MemStore()
|
||||||
|
err := store.AddCertFromFile("../fixtures/trustmanager/root-ca.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to load certificate from file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
pool := store.GetCertificatePool()
|
||||||
|
numCerts := len(pool.Subjects())
|
||||||
|
if numCerts != 1 {
|
||||||
|
t.Fatalf("unexpected number of certificates in pool: %d", numCerts)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue