@@ -17,13 +17,17 @@ limitations under the License.
1717package phases
1818
1919import (
20+ "os"
21+ "path/filepath"
2022 "testing"
2123
2224 "github.com/spf13/cobra"
2325
2426 kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
2527 "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow"
28+ certsphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs"
2629 certstestutil "k8s.io/kubernetes/cmd/kubeadm/app/util/certs"
30+ "k8s.io/kubernetes/cmd/kubeadm/app/util/pkiutil"
2731 pkiutiltesting "k8s.io/kubernetes/cmd/kubeadm/app/util/pkiutil/testing"
2832 testutil "k8s.io/kubernetes/cmd/kubeadm/test"
2933)
@@ -33,10 +37,19 @@ type testCertsData struct {
3337 cfg * kubeadmapi.InitConfiguration
3438}
3539
40+ type testDryRunCertsData struct {
41+ testCertsData
42+ certificateDir string
43+ certificateWriteDir string
44+ }
45+
3646func (t * testCertsData ) Cfg () * kubeadmapi.InitConfiguration { return t .cfg }
3747func (t * testCertsData ) ExternalCA () bool { return false }
3848func (t * testCertsData ) CertificateDir () string { return t .cfg .CertificatesDir }
3949func (t * testCertsData ) CertificateWriteDir () string { return t .cfg .CertificatesDir }
50+ func (t * testDryRunCertsData ) DryRun () bool { return true }
51+ func (t * testDryRunCertsData ) CertificateDir () string { return t .certificateDir }
52+ func (t * testDryRunCertsData ) CertificateWriteDir () string { return t .certificateWriteDir }
4053
4154func TestCreateSparseCerts (t * testing.T ) {
4255 for _ , test := range certstestutil .GetSparseCertTestCases (t ) {
@@ -63,3 +76,45 @@ func TestCreateSparseCerts(t *testing.T) {
6376 })
6477 }
6578}
79+
80+ func TestRunCAPhaseCopiesExistingCAFilesToDryRunDir (t * testing.T ) {
81+ for _ , ca := range []* certsphase.KubeadmCert {
82+ certsphase .KubeadmCertRootCA (),
83+ certsphase .KubeadmCertFrontProxyCA (),
84+ certsphase .KubeadmCertEtcdCA (),
85+ } {
86+ t .Run (ca .Name , func (t * testing.T ) {
87+ pkiutiltesting .Reset ()
88+
89+ sourceDir := t .TempDir ()
90+ writeDir := t .TempDir ()
91+ caCert , caKey := certstestutil .SetupCertificateAuthority (t )
92+ certPath , _ := pkiutil .PathsForCertAndKey (sourceDir , ca .BaseName )
93+ if err := os .MkdirAll (filepath .Dir (certPath ), os .FileMode (0700 )); err != nil {
94+ t .Fatalf ("failed to create source directory for %s: %v" , ca .BaseName , err )
95+ }
96+ if err := pkiutil .WriteCertAndKey (sourceDir , ca .BaseName , caCert , caKey ); err != nil {
97+ t .Fatalf ("failed to write source CA files for %s: %v" , ca .BaseName , err )
98+ }
99+
100+ cfg := testutil .GetDefaultInternalConfig (t )
101+ cfg .CertificatesDir = sourceDir
102+ data := & testDryRunCertsData {
103+ testCertsData : testCertsData {cfg : cfg },
104+ certificateDir : sourceDir ,
105+ certificateWriteDir : writeDir ,
106+ }
107+
108+ if err := runCAPhase (ca )(data ); err != nil {
109+ t .Fatalf ("runCAPhase(%s) returned error: %v" , ca .Name , err )
110+ }
111+
112+ if _ , err := pkiutil .TryLoadCertFromDisk (writeDir , ca .BaseName ); err != nil {
113+ t .Fatalf ("expected copied cert for %s in dry-run dir: %v" , ca .BaseName , err )
114+ }
115+ if _ , err := pkiutil .TryLoadKeyFromDisk (writeDir , ca .BaseName ); err != nil {
116+ t .Fatalf ("expected copied key for %s in dry-run dir: %v" , ca .BaseName , err )
117+ }
118+ })
119+ }
120+ }
0 commit comments