github.com/amanya/packer@v0.12.1-0.20161117214323-902ac5ab2eb6/builder/googlecompute/private_key_test.go (about) 1 package googlecompute 2 3 import ( 4 "crypto/rand" 5 "crypto/x509" 6 "encoding/pem" 7 "io/ioutil" 8 "os" 9 "testing" 10 ) 11 12 func testPrivateKeyFile(t *testing.T) string { 13 tf, err := ioutil.TempFile("", "packer") 14 if err != nil { 15 t.Fatalf("bad: %s", err) 16 } 17 defer tf.Close() 18 19 b := &pem.Block{ 20 Type: "RSA PRIVATE KEY", 21 Bytes: []byte("what"), 22 } 23 24 if err := pem.Encode(tf, b); err != nil { 25 t.Fatalf("err: %s", err) 26 } 27 28 return tf.Name() 29 } 30 31 func TestProcesssPrivateKeyFile(t *testing.T) { 32 path := testPrivateKeyFile(t) 33 defer os.Remove(path) 34 35 data, err := processPrivateKeyFile(path, "") 36 if err != nil { 37 t.Fatalf("err: %s", err) 38 } 39 40 if len(data) <= 0 { 41 t.Fatalf("bad: %#v", data) 42 } 43 } 44 45 func TestProcessPrivateKeyFile_encrypted(t *testing.T) { 46 // Encrypt the file 47 b, err := x509.EncryptPEMBlock(rand.Reader, 48 "RSA PRIVATE KEY", 49 []byte("what"), 50 []byte("password"), 51 x509.PEMCipherAES128) 52 if err != nil { 53 t.Fatalf("err: %s", err) 54 } 55 56 tf, err := ioutil.TempFile("", "packer") 57 if err != nil { 58 t.Fatalf("bad: %s", err) 59 } 60 defer os.Remove(tf.Name()) 61 62 err = pem.Encode(tf, b) 63 tf.Close() 64 if err != nil { 65 t.Fatalf("err: %s", err) 66 } 67 68 path := tf.Name() 69 70 // Should have an error with a bad password 71 if _, err := processPrivateKeyFile(path, "bad"); err == nil { 72 t.Fatal("should error") 73 } 74 75 if _, err := processPrivateKeyFile(path, "password"); err != nil { 76 t.Fatalf("bad: %s", err) 77 } 78 }