// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package troubleshoot import ( "testing" "time" envoy_admin_v3 "github.com/envoyproxy/go-control-plane/envoy/admin/v3" "github.com/stretchr/testify/require" "google.golang.org/protobuf/types/known/timestamppb" ) func TestValidateCerts(t *testing.T) { t.Parallel() anHourAgo := timestamppb.New(time.Now().Add(-1 * time.Hour)) cases := map[string]struct { certs *envoy_admin_v3.Certificates expectedError string }{ "cert is nil": { certs: nil, expectedError: "Certificate object is nil in the proxy configuration", }, "no certificates": { certs: &envoy_admin_v3.Certificates{ Certificates: []*envoy_admin_v3.Certificate{}, }, expectedError: "No certificates found", }, "ca expired": { certs: &envoy_admin_v3.Certificates{ Certificates: []*envoy_admin_v3.Certificate{ { CaCert: []*envoy_admin_v3.CertificateDetails{ { ExpirationTime: anHourAgo, }, }, }, }, }, expectedError: "CA certificate is expired", }, "cert expired": { certs: &envoy_admin_v3.Certificates{ Certificates: []*envoy_admin_v3.Certificate{ { CertChain: []*envoy_admin_v3.CertificateDetails{ { ExpirationTime: anHourAgo, }, }, }, }, }, expectedError: "Certificate chain is expired", }, } ts := Troubleshoot{} for name, tc := range cases { t.Run(name, func(t *testing.T) { messages := ts.validateCerts(tc.certs) var outputErrors string for _, msgError := range messages.Errors() { outputErrors += msgError.Message for _, action := range msgError.PossibleActions { outputErrors += action } } if tc.expectedError == "" { require.True(t, messages.Success()) } else { require.Contains(t, outputErrors, tc.expectedError) } }) } }