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  }