ci: Do not skip tests because of missing binaries on CI

If the CI environment is not correct for running tests the tests
should fail, so that we don't accidentally stop running some tests
because of a change to our CI environment.

Also removed a duplicate delcaration from init. I believe one was
overriding the other as they are both in the same package.
This commit is contained in:
Daniel Nephin 2020-03-23 17:02:13 -04:00
parent 30b29f3517
commit dc983db333
4 changed files with 44 additions and 85 deletions

View File

@ -10,22 +10,18 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func skipIfAWSNotConfigured(t *testing.T) bool { func skipIfAWSNotConfigured(t *testing.T) {
enabled := os.Getenv("ENABLE_AWS_PCA_TESTS") enabled := os.Getenv("ENABLE_AWS_PCA_TESTS")
ok, err := strconv.ParseBool(enabled) ok, err := strconv.ParseBool(enabled)
if err != nil || !ok { if err != nil || !ok {
t.Skip("Skipping because AWS tests are not enabled") t.Skip("Skipping because AWS tests are not enabled")
return true
} }
return false
} }
func TestAWSBootstrapAndSignPrimary(t *testing.T) { func TestAWSBootstrapAndSignPrimary(t *testing.T) {
// Note not parallel since we could easily hit AWS limits of too many CAs if // Note not parallel since we could easily hit AWS limits of too many CAs if
// all of these tests run at once. // all of these tests run at once.
if skipIfAWSNotConfigured(t) { skipIfAWSNotConfigured(t)
return
}
for _, tc := range KeyTestCases { for _, tc := range KeyTestCases {
tc := tc tc := tc
@ -83,9 +79,7 @@ func testSignAndValidate(t *testing.T, p Provider, rootPEM string, intermediateP
func TestAWSBootstrapAndSignSecondary(t *testing.T) { func TestAWSBootstrapAndSignSecondary(t *testing.T) {
// Note not parallel since we could easily hit AWS limits of too many CAs if // Note not parallel since we could easily hit AWS limits of too many CAs if
// all of these tests run at once. // all of these tests run at once.
if skipIfAWSNotConfigured(t) { skipIfAWSNotConfigured(t)
return
}
p1 := testAWSProvider(t, testProviderConfigPrimary(t, nil)) p1 := testAWSProvider(t, testProviderConfigPrimary(t, nil))
defer p1.Cleanup() defer p1.Cleanup()
@ -179,9 +173,7 @@ func TestAWSBootstrapAndSignSecondary(t *testing.T) {
func TestAWSBootstrapAndSignSecondaryConsul(t *testing.T) { func TestAWSBootstrapAndSignSecondaryConsul(t *testing.T) {
// Note not parallel since we could easily hit AWS limits of too many CAs if // Note not parallel since we could easily hit AWS limits of too many CAs if
// all of these tests run at once. // all of these tests run at once.
if skipIfAWSNotConfigured(t) { skipIfAWSNotConfigured(t)
return
}
t.Run("pri=consul,sec=aws", func(t *testing.T) { t.Run("pri=consul,sec=aws", func(t *testing.T) {
conf := testConsulCAConfig() conf := testConsulCAConfig()
@ -215,9 +207,7 @@ func TestAWSBootstrapAndSignSecondaryConsul(t *testing.T) {
} }
func TestAWSNoCrossSigning(t *testing.T) { func TestAWSNoCrossSigning(t *testing.T) {
if skipIfAWSNotConfigured(t) { skipIfAWSNotConfigured(t)
return
}
p1 := testAWSProvider(t, testProviderConfigPrimary(t, nil)) p1 := testAWSProvider(t, testProviderConfigPrimary(t, nil))
defer p1.Cleanup() defer p1.Cleanup()
@ -246,15 +236,6 @@ func testAWSProvider(t *testing.T, cfg ProviderConfig) *AWSProvider {
return p return p
} }
type testLogger struct {
t *testing.T
}
func (l *testLogger) Write(b []byte) (int, error) {
l.t.Log(string(b))
return len(b), nil
}
func testProviderConfigPrimary(t *testing.T, cfg map[string]interface{}) ProviderConfig { func testProviderConfigPrimary(t *testing.T, cfg map[string]interface{}) ProviderConfig {
rawCfg := make(map[string]interface{}) rawCfg := make(map[string]interface{})
for k, v := range cfg { for k, v := range cfg {

View File

@ -40,9 +40,7 @@ func TestVaultCAProvider_VaultTLSConfig(t *testing.T) {
func TestVaultCAProvider_Bootstrap(t *testing.T) { func TestVaultCAProvider_Bootstrap(t *testing.T) {
t.Parallel() t.Parallel()
if skipIfVaultNotPresent(t) { skipIfVaultNotPresent(t)
return
}
provider, testVault := testVaultProvider(t) provider, testVault := testVaultProvider(t)
defer testVault.Stop() defer testVault.Stop()
@ -103,9 +101,7 @@ func assertCorrectKeyType(t *testing.T, want, certPEM string) {
func TestVaultCAProvider_SignLeaf(t *testing.T) { func TestVaultCAProvider_SignLeaf(t *testing.T) {
t.Parallel() t.Parallel()
if skipIfVaultNotPresent(t) { skipIfVaultNotPresent(t)
return
}
for _, tc := range KeyTestCases { for _, tc := range KeyTestCases {
tc := tc tc := tc
@ -189,9 +185,7 @@ func TestVaultCAProvider_SignLeaf(t *testing.T) {
func TestVaultCAProvider_CrossSignCA(t *testing.T) { func TestVaultCAProvider_CrossSignCA(t *testing.T) {
t.Parallel() t.Parallel()
if skipIfVaultNotPresent(t) { skipIfVaultNotPresent(t)
return
}
tests := CASigningKeyTypeCases() tests := CASigningKeyTypeCases()
@ -246,9 +240,7 @@ func TestVaultCAProvider_CrossSignCA(t *testing.T) {
func TestVaultProvider_SignIntermediate(t *testing.T) { func TestVaultProvider_SignIntermediate(t *testing.T) {
t.Parallel() t.Parallel()
if skipIfVaultNotPresent(t) { skipIfVaultNotPresent(t)
return
}
tests := CASigningKeyTypeCases() tests := CASigningKeyTypeCases()
@ -277,9 +269,7 @@ func TestVaultProvider_SignIntermediate(t *testing.T) {
func TestVaultProvider_SignIntermediateConsul(t *testing.T) { func TestVaultProvider_SignIntermediateConsul(t *testing.T) {
t.Parallel() t.Parallel()
if skipIfVaultNotPresent(t) { skipIfVaultNotPresent(t)
return
}
// primary = Vault, secondary = Consul // primary = Vault, secondary = Consul
t.Run("pri=vault,sec=consul", func(t *testing.T) { t.Run("pri=vault,sec=consul", func(t *testing.T) {
@ -397,8 +387,9 @@ func testVaultProviderWithConfig(t *testing.T, isPrimary bool, rawConf map[strin
var printedVaultVersion sync.Once var printedVaultVersion sync.Once
// skipIfVaultNotPresent skips the test and returns true if vault is not found var mustAlwaysRun = os.Getenv("CI") == "true"
func skipIfVaultNotPresent(t *testing.T) bool {
func skipIfVaultNotPresent(t *testing.T) {
vaultBinaryName := os.Getenv("VAULT_BINARY_NAME") vaultBinaryName := os.Getenv("VAULT_BINARY_NAME")
if vaultBinaryName == "" { if vaultBinaryName == "" {
vaultBinaryName = "vault" vaultBinaryName = "vault"
@ -406,10 +397,11 @@ func skipIfVaultNotPresent(t *testing.T) bool {
path, err := exec.LookPath(vaultBinaryName) path, err := exec.LookPath(vaultBinaryName)
if err != nil || path == "" { if err != nil || path == "" {
t.Skipf("%q not found on $PATH - download and install to run this test", vaultBinaryName) if mustAlwaysRun {
return true t.Fatalf("%q not found on $PATH", vaultBinaryName)
}
t.Skipf("%q not found on $PATH - download and install to run this test", vaultBinaryName)
} }
return false
} }
func runTestVault() (*testVaultServer, error) { func runTestVault() (*testVaultServer, error) {

View File

@ -17,18 +17,15 @@ type KeyConfig struct {
keyBits int keyBits int
} }
var goodParams, badParams []KeyConfig var goodParams = []KeyConfig{
func init() {
goodParams = []KeyConfig{
{keyType: "rsa", keyBits: 2048}, {keyType: "rsa", keyBits: 2048},
{keyType: "rsa", keyBits: 4096}, {keyType: "rsa", keyBits: 4096},
{keyType: "ec", keyBits: 224}, {keyType: "ec", keyBits: 224},
{keyType: "ec", keyBits: 256}, {keyType: "ec", keyBits: 256},
{keyType: "ec", keyBits: 384}, {keyType: "ec", keyBits: 384},
{keyType: "ec", keyBits: 521}, {keyType: "ec", keyBits: 521},
} }
badParams = []KeyConfig{ var badParams = []KeyConfig{
{keyType: "rsa", keyBits: 0}, {keyType: "rsa", keyBits: 0},
{keyType: "rsa", keyBits: 1024}, {keyType: "rsa", keyBits: 1024},
{keyType: "rsa", keyBits: 24601}, {keyType: "rsa", keyBits: 24601},
@ -37,7 +34,6 @@ func init() {
{keyType: "ec", keyBits: 321}, {keyType: "ec", keyBits: 321},
{keyType: "ecdsa", keyBits: 256}, // test for "ecdsa" instead of "ec" {keyType: "ecdsa", keyBits: 256}, // test for "ecdsa" instead of "ec"
{keyType: "aes", keyBits: 128}, {keyType: "aes", keyBits: 128},
}
} }
func makeConfig(kc KeyConfig) structs.CommonCAProviderConfig { func makeConfig(kc KeyConfig) structs.CommonCAProviderConfig {

View File

@ -12,29 +12,22 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
// hasOpenSSL is used to determine if the openssl CLI exists for unit tests. var mustAlwaysRun = os.Getenv("CI") == "true"
var hasOpenSSL bool
func init() { func skipIfMissingOpenSSL(t *testing.T) {
goodParams = []KeyConfig{ openSSLBinaryName := "openssl"
{keyType: "rsa", keyBits: 2048}, _, err := exec.LookPath(openSSLBinaryName)
{keyType: "rsa", keyBits: 4096}, if err != nil {
{keyType: "ec", keyBits: 224}, if mustAlwaysRun {
{keyType: "ec", keyBits: 256}, t.Fatalf("%q not found on $PATH", openSSLBinaryName)
{keyType: "ec", keyBits: 384}, }
{keyType: "ec", keyBits: 521}, t.Skipf("%q not found on $PATH", openSSLBinaryName)
} }
_, err := exec.LookPath("openssl")
hasOpenSSL = err == nil
} }
// Test that the TestCA and TestLeaf functions generate valid certificates. // Test that the TestCA and TestLeaf functions generate valid certificates.
func testCAAndLeaf(t *testing.T, keyType string, keyBits int) { func testCAAndLeaf(t *testing.T, keyType string, keyBits int) {
if !hasOpenSSL { skipIfMissingOpenSSL(t)
t.Skip("openssl not found")
return
}
require := require.New(t) require := require.New(t)
@ -66,10 +59,7 @@ func testCAAndLeaf(t *testing.T, keyType string, keyBits int) {
// Test cross-signing. // Test cross-signing.
func testCAAndLeaf_xc(t *testing.T, keyType string, keyBits int) { func testCAAndLeaf_xc(t *testing.T, keyType string, keyBits int) {
if !hasOpenSSL { skipIfMissingOpenSSL(t)
t.Skip("openssl not found")
return
}
assert := assert.New(t) assert := assert.New(t)