github.com/kubernetes-incubator/kube-aws@v0.16.4/test/helper/helper.go (about)

     1  package helper
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  )
     8  
     9  const (
    10  	dummyKey = `-----BEGIN RSA PRIVATE KEY-----
    11  ZHVtbXkK
    12  -----END RSA PRIVATE KEY-----`
    13  
    14  	dummyCert = `-----BEGIN CERTIFICATE-----
    15  MIIBvjCCAWgCCQDQ4pUwqdLIIDANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJV
    16  UzESMBAGA1UECAwJQW50YXJ0aWNhMRowGAYDVQQKDBFUZXN0IFdpZGdldHMgSW5j
    17  LjERMA8GA1UECwwIVGVzdCBMYWIxEzARBgNVBAMMCmR1bW15LWNlcnQwIBcNMTgw
    18  NDMwMDk1NDExWhgPMjUxNzEyMzAwOTU0MTFaMGUxCzAJBgNVBAYTAlVTMRIwEAYD
    19  VQQIDAlBbnRhcnRpY2ExGjAYBgNVBAoMEVRlc3QgV2lkZ2V0cyBJbmMuMREwDwYD
    20  VQQLDAhUZXN0IExhYjETMBEGA1UEAwwKZHVtbXktY2VydDBcMA0GCSqGSIb3DQEB
    21  AQUAA0sAMEgCQQDgd2lsmEBDXMxZsaFUSwnC/FF3x/62SIb3/f8mrGrBtb6Vim11
    22  s7T0zFCm9cWbTi63bzWRFs3gP2FwwU1MF5RDAgMBAAEwDQYJKoZIhvcNAQELBQAD
    23  QQA0bLc3+5kpZuJaAK+C0XvTPZFz8Vx1nv8YnwoIJdEvvGOPGAqvrA8Y0Fvs7L11
    24  Z3leoFbVQmybV7EcduIrOANA
    25  -----END CERTIFICATE-----`
    26  )
    27  
    28  func WithTempDir(fn func(dir string)) {
    29  	dir, err := ioutil.TempDir("", "test-temp-dir")
    30  
    31  	if err != nil {
    32  		panic(err)
    33  	}
    34  
    35  	defer os.RemoveAll(dir)
    36  
    37  	fn(dir)
    38  }
    39  
    40  func WithDummyCredentials(fn func(dir string)) {
    41  	withDummyCredentials(true, fn)
    42  }
    43  
    44  func WithDummyCredentialsButCAKey(fn func(dir string)) {
    45  	withDummyCredentials(false, fn)
    46  }
    47  
    48  func withDummyCredentials(alsoWriteCAKey bool, fn func(dir string)) {
    49  	dir, err := ioutil.TempDir("", "dummy-credentials")
    50  
    51  	if err != nil {
    52  		panic(err)
    53  	}
    54  
    55  	// Remove all the contents in the dir including *.pem.enc created by ReadOrUpdateCompactAssets()
    56  	// Otherwise we end up with a lot of garbage directories we failed to remove as they aren't empty in
    57  	// config/temp, nodepool/config/temp, test/integration/temp
    58  	defer os.RemoveAll(dir)
    59  
    60  	for _, pairName := range []string{"ca", "apiserver", "kube-controller-manager", "kube-scheduler", "worker", "admin", "etcd", "etcd-client", "apiserver-aggregator"} {
    61  		certFile := fmt.Sprintf("%s/%s.pem", dir, pairName)
    62  		if err := ioutil.WriteFile(certFile, []byte(dummyCert), 0644); err != nil {
    63  			panic(err)
    64  		}
    65  		defer os.Remove(certFile)
    66  
    67  		if pairName != "ca" || alsoWriteCAKey {
    68  			keyFile := fmt.Sprintf("%s/%s-key.pem", dir, pairName)
    69  			if err := ioutil.WriteFile(keyFile, []byte(dummyKey), 0644); err != nil {
    70  				panic(err)
    71  			}
    72  			defer os.Remove(keyFile)
    73  		}
    74  	}
    75  
    76  	type symlink struct {
    77  		from string
    78  		to   string
    79  	}
    80  
    81  	symlinks := []symlink{
    82  		{"ca.pem", "worker-ca.pem"},
    83  		{"ca.pem", "etcd-trusted-ca.pem"},
    84  	}
    85  
    86  	if alsoWriteCAKey {
    87  		symlinks = append(symlinks, symlink{"ca-key.pem", "worker-ca-key.pem"})
    88  	}
    89  
    90  	wd, err := os.Getwd()
    91  	if err != nil {
    92  		panic(err)
    93  	}
    94  
    95  	if err := os.Chdir(dir); err != nil {
    96  		panic(err)
    97  	}
    98  
    99  	for _, sl := range symlinks {
   100  		from := sl.from
   101  		to := sl.to
   102  
   103  		if _, err := os.Lstat(to); err == nil {
   104  			if err := os.Remove(to); err != nil {
   105  				panic(err)
   106  			}
   107  		}
   108  
   109  		if err := os.Symlink(from, to); err != nil {
   110  			panic(err)
   111  		}
   112  		defer os.Remove(to)
   113  	}
   114  
   115  	if err := os.Chdir(wd); err != nil {
   116  		panic(err)
   117  	}
   118  
   119  	fn(dir)
   120  }