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  }