github.com/gophercloud/gophercloud@v1.11.0/openstack/compute/v2/servers/testing/results_test.go (about) 1 package testing 2 3 import ( 4 "crypto/rsa" 5 "encoding/json" 6 "fmt" 7 "testing" 8 9 "github.com/gophercloud/gophercloud" 10 "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" 11 th "github.com/gophercloud/gophercloud/testhelper" 12 "github.com/gophercloud/gophercloud/testhelper/client" 13 "golang.org/x/crypto/ssh" 14 ) 15 16 // Fail - No password in JSON. 17 func TestExtractPassword_no_pwd_data(t *testing.T) { 18 19 var dejson interface{} 20 err := json.Unmarshal([]byte(`{ "Crappy data": ".-.-." }`), &dejson) 21 if err != nil { 22 t.Fatalf("%s", err) 23 } 24 resp := servers.GetPasswordResult{Result: gophercloud.Result{Body: dejson}} 25 26 pwd, err := resp.ExtractPassword(nil) 27 th.AssertNoErr(t, err) 28 th.AssertEquals(t, pwd, "") 29 } 30 31 // Ok - return encrypted password when no private key is given. 32 func TestExtractPassword_encrypted_pwd(t *testing.T) { 33 34 var dejson interface{} 35 sejson := []byte(`{"password":"PP8EnwPO9DhEc8+O/6CKAkPF379mKsUsfFY6yyw0734XXvKsSdV9KbiHQ2hrBvzeZxtGMrlFaikVunCRizyLLWLMuOi4hoH+qy9F9sQid61gQIGkxwDAt85d/7Eau2/KzorFnZhgxArl7IiqJ67X6xjKkR3zur+Yp3V/mtVIehpPYIaAvPbcp2t4mQXl1I9J8yrQfEZOctLL1L4heDEVXnxvNihVLK6pivlVggp6SZCtjj9cduZGrYGsxsOCso1dqJQr7GCojfwvuLOoG0OYwEGuWVTZppxWxi/q1QgeHFhGKA5QUXlz7pS71oqpjYsTeViuHnfvlqb5TVYZpQ1haw=="}`) 36 37 err := json.Unmarshal(sejson, &dejson) 38 fmt.Printf("%v\n", dejson) 39 if err != nil { 40 t.Fatalf("%s", err) 41 } 42 resp := servers.GetPasswordResult{Result: gophercloud.Result{Body: dejson}} 43 44 pwd, err := resp.ExtractPassword(nil) 45 th.AssertNoErr(t, err) 46 th.AssertEquals(t, "PP8EnwPO9DhEc8+O/6CKAkPF379mKsUsfFY6yyw0734XXvKsSdV9KbiHQ2hrBvzeZxtGMrlFaikVunCRizyLLWLMuOi4hoH+qy9F9sQid61gQIGkxwDAt85d/7Eau2/KzorFnZhgxArl7IiqJ67X6xjKkR3zur+Yp3V/mtVIehpPYIaAvPbcp2t4mQXl1I9J8yrQfEZOctLL1L4heDEVXnxvNihVLK6pivlVggp6SZCtjj9cduZGrYGsxsOCso1dqJQr7GCojfwvuLOoG0OYwEGuWVTZppxWxi/q1QgeHFhGKA5QUXlz7pS71oqpjYsTeViuHnfvlqb5TVYZpQ1haw==", pwd) 47 } 48 49 // Ok - return decrypted password when private key is given. 50 // Decrytion can be verified by: 51 // 52 // echo "<enc_pwd>" | base64 -D | openssl rsautl -decrypt -inkey <privateKey.pem> 53 func TestExtractPassword_decrypted_pwd(t *testing.T) { 54 55 privateKey, err := ssh.ParseRawPrivateKey([]byte(` 56 -----BEGIN RSA PRIVATE KEY----- 57 MIIEpQIBAAKCAQEAo1ODZgwMVdTJYim9UYuYhowoPMhGEuV5IRZjcJ315r7RBSC+ 58 yEiBb1V+jhf+P8fzAyU35lkBzZGDr7E3jxSesbOuYT8cItQS4ErUnI1LGuqvMxwv 59 X3GMyE/HmOcaiODF1XZN3Ur5pMJdVknnmczgUsW0hT98Udrh3MQn9WSuh/6LRy6+ 60 x1QsKHOCLFPnkhWa3LKyxmpQq/Gvhz+6NLe+gt8MFullA5mKQxBJ/K6laVHeaMlw 61 JG3GCX0EZhRlvzoV8koIBKZtbKFolFr8ZtxBm3R5LvnyrtOvp22sa+xeItUT5kG1 62 ZnbGNdK87oYW+VigEUfzT/+8R1i6E2QIXoeZiQIDAQABAoIBAQCVZ70IqbbTAW8j 63 RAlyQh/J3Qal65LmkFJJKUDX8TfT1/Q/G6BKeMEmxm+Zrmsfj1pHI1HKftt+YEG1 64 g4jOc09kQXkgbmnfll6aHPn3J+1vdwXD3GGdjrL5PrnYrngAhJWU2r8J0x8hT8ew 65 OrUJZXhDX6XuSpAAFRmOKUZgXbSmo4X+LZX76ACnarselJt5FL724ECvpWJ7xxC4 66 FMzvp4RqMmNFvv/Uq9lE/EmoSk4dviYyIZZ16DbDNyc9k/sGqCAMktCEwZ3EQm// 67 S5bkNhgP6oUXjluWy53aPRgykEylgDWo5SSdSEyKnw/fciU0xdprA9JrBGIcTyHS 68 /k2kgD4xAoGBANTkJ88Q0YrxX3fZNZVqcn00XKTxPGmxN5LRs7eV743q30AxK5Db 69 QU8iwaAA1IKUWV5DLhgUTNsDCOPUPue4aOSBD3/sj+WEmvIhj7afDL5didkYHsqf 70 fDnhFHq7y/3i57d428C7BwwR79pGWVyi7vH3pfu9A1iwl1aNOae+zvbVAoGBAMRm 71 AmwQ9fJ3Qc44jysFK/yliLRGdShjkMMah5G3JlrelwfPtwPwEL2EHHhJB/C1acMs 72 n6Q6RaoF6WNSZUY65ksQg7aPOYf2X0FTFwQJvwDJ4qlWjmq7w+tQ0AoGJG+dVUmQ 73 zHZ/Y+HokSXzz9c4oevk4v/rMgAQ00WHrTdtIhnlAoGBALIJJ72D7CkNGHCq5qPQ 74 xHQukPejgolFGhufYXM7YX3GmPMe67cVlTVv9Isxhoa5N0+cUPT0LR3PGOUm/4Bb 75 eOT3hZXOqLwhvE6XgI8Rzd95bClwgXekDoh80dqeKMdmta961BQGlKskaPiacmsF 76 G1yhZV70P9Mwwy8vpbLB4GUNAoGAbTwbjsWkNfa0qCF3J8NZoszjCvnBQfSW2J1R 77 1+8ZKyNwt0yFi3Ajr3TibNiZzPzp1T9lj29FvfpJxA9Y+sXZvthxmcFxizix5GB1 78 ha5yCNtA8VSOI7lJkAFDpL+j1lyYyjD6N9JE2KqEyKoh6J+8F7sXsqW7CqRRDfQX 79 mKNfey0CgYEAxcEoNoADN2hRl7qY9rbQfVvQb3RkoQkdHhl9gpLFCcV32IP8R4xg 80 09NbQK5OmgcIuZhLVNzTmUHJbabEGeXqIFIV0DsqECAt3WzbDyKQO23VJysFD46c 81 KSde3I0ybDz7iS2EtceKB7m4C0slYd+oBkm4efuF00rCOKDwpFq45m0= 82 -----END RSA PRIVATE KEY----- 83 `)) 84 if err != nil { 85 t.Fatalf("Error parsing private key: %s\n", err) 86 } 87 88 var dejson interface{} 89 sejson := []byte(`{"password":"PP8EnwPO9DhEc8+O/6CKAkPF379mKsUsfFY6yyw0734XXvKsSdV9KbiHQ2hrBvzeZxtGMrlFaikVunCRizyLLWLMuOi4hoH+qy9F9sQid61gQIGkxwDAt85d/7Eau2/KzorFnZhgxArl7IiqJ67X6xjKkR3zur+Yp3V/mtVIehpPYIaAvPbcp2t4mQXl1I9J8yrQfEZOctLL1L4heDEVXnxvNihVLK6pivlVggp6SZCtjj9cduZGrYGsxsOCso1dqJQr7GCojfwvuLOoG0OYwEGuWVTZppxWxi/q1QgeHFhGKA5QUXlz7pS71oqpjYsTeViuHnfvlqb5TVYZpQ1haw=="}`) 90 91 err = json.Unmarshal(sejson, &dejson) 92 fmt.Printf("%v\n", dejson) 93 if err != nil { 94 t.Fatalf("%s", err) 95 } 96 resp := servers.GetPasswordResult{Result: gophercloud.Result{Body: dejson}} 97 98 pwd, err := resp.ExtractPassword(privateKey.(*rsa.PrivateKey)) 99 th.AssertNoErr(t, err) 100 th.AssertEquals(t, "ruZKK0tqxRfYm5t7lSJq", pwd) 101 } 102 103 func TestListAddressesAllPages(t *testing.T) { 104 th.SetupHTTP() 105 defer th.TeardownHTTP() 106 HandleAddressListSuccessfully(t) 107 108 allPages, err := servers.ListAddresses(client.ServiceClient(), "asdfasdfasdf").AllPages() 109 th.AssertNoErr(t, err) 110 _, err = servers.ExtractAddresses(allPages) 111 th.AssertNoErr(t, err) 112 }