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