github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/apigw/v2/domain_test.go (about)

     1  package v2
     2  
     3  import (
     4  	"testing"
     5  
     6  	golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
     7  	"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
     8  	"github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools"
     9  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/apigw/v2/domain"
    10  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/apigw/v2/group"
    11  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/dns/v2/recordsets"
    12  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/dns/v2/zones"
    13  	th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
    14  )
    15  
    16  const (
    17  	certificate = `<<EOT
    18  -----BEGIN CERTIFICATE-----
    19  MIIEMDCCAxigAwIBAgISBKmXWIa316BWEURqVnLroXwgMA0GCSqGSIb3DQEBCwUA
    20  MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
    21  EwJSMzAeFw0yNDAzMDExMDQ3MTRaFw0yNDA1MzAxMDQ3MTNaMCIxIDAeBgNVBAMT
    22  F3JhbmNoZXItdGVzdC52YXh4Y2hhLmluMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
    23  QgAE8ps2bDLATJ8Lyufn4VG8y0zxBK5AJ9p60bE9kTwftr3xKgE0mC25qWt0M1JY
    24  z6opBmChuwGyx/M7L/L4dhp7ZaOCAhkwggIVMA4GA1UdDwEB/wQEAwIHgDAdBgNV
    25  HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E
    26  FgQU1Uw51mX15Fovr1jOqEItb7J90lgwHwYDVR0jBBgwFoAUFC6zF7dYVsuuUAlA
    27  5h+vnYsUwsYwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUFBzABhhVodHRwOi8vcjMu
    28  by5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9yMy5pLmxlbmNyLm9yZy8w
    29  IgYDVR0RBBswGYIXcmFuY2hlci10ZXN0LnZheHhjaGEuaW4wEwYDVR0gBAwwCjAI
    30  BgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdQA7U3d1Pi25gE6LMFsG
    31  /kA7Z9hPw/THvQANLXJv4frUFwAAAY351wROAAAEAwBGMEQCICGcAZhHtchF6tLQ
    32  yolMSuU5ZQX9ZQ/Ld1Mqg3t1kHBpAiB5zPoxpc2Nvty+U+lNVx5QI6GqY8+oIOP2
    33  +PNhpJleaAB3AO7N0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABjfnX
    34  BE4AAAQDAEgwRgIhALgFmbF4pFUBeEXD8sjaKB80f7ZYQ+WBXS9887VgBZvqAiEA
    35  892Gdv3ZP8uR4ptXUOfXsR7JTCBCsFCAG3rk5e8vt5MwDQYJKoZIhvcNAQELBQAD
    36  ggEBAEk8Gj7laMCp9mx/55lCELBCdSBtCBQKvAJrDKVZHZ35keeOcxWpzVsQrall
    37  WgB5UuIspH/EBFHe7hrwcRXW4IkjXFS0mWz4GqwiQ7EBnk6ITiw4Zyj4ejLPNGKj
    38  v2YSBwrBZqxXVqW981FvTGNhmcp45j2fEA37DwoSWU/wKWHpRqA0akIZOGoWwAfu
    39  kRE9ZuPYykvnnl4qk25KWbIYAO4/65WjMqSkj5imOVA8yNtK3j3qnAcNwQL8VPr/
    40  qH2IF4KjanBUK76qT2wHKkj2GPMP/vcB9Nzg+mY+elax9XUhtpR0ZJVWDzE150Vo
    41  ii8i6whnmTj+S/QRvhOqHmWU0Xk=
    42  -----END CERTIFICATE-----
    43  EOT
    44  `
    45  
    46  	privateKey = `<<EOT
    47  -----BEGIN PRIVATE KEY-----
    48  MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgpR2jFW8FNrJCaSTf
    49  evnYeTMA7AIS/DgMsmoIeD1CWDyhRANCAATymzZsMsBMnwvK5+fhUbzLTPEErkAn
    50  2nrRsT2RPB+2vfEqATSYLbmpa3QzUljPqikGYKG7AbLH8zsv8vh2Gntl
    51  -----END PRIVATE KEY-----
    52  EOT
    53  `
    54  )
    55  
    56  func TestDomainLifecycle(t *testing.T) {
    57  	apiGwID := clients.EnvOS.GetEnv("APIGW_ID")
    58  
    59  	if apiGwID == "" {
    60  		t.Skip("`apiGwID` need to be defined")
    61  	}
    62  
    63  	client, err := clients.NewAPIGWClient()
    64  	th.AssertNoErr(t, err)
    65  
    66  	t.Logf("Attempting to create API Gateway Group")
    67  	grp := CreateGroup(client, t, apiGwID)
    68  	t.Cleanup(func() {
    69  		t.Logf("Attempting to delete API Gateway Group")
    70  		th.AssertNoErr(t, group.Delete(client, apiGwID, grp.ID))
    71  	})
    72  
    73  	t.Logf("Attempting to create Public DNS zone with A record")
    74  	clientNetwork, err := clients.NewDNSV2Client()
    75  	th.AssertNoErr(t, err)
    76  	rs := CreateDns(clientNetwork, t)
    77  	t.Cleanup(func() {
    78  		t.Logf("Attempting to delete Public DNS zone")
    79  		_, err := zones.Delete(clientNetwork, rs.ZoneID).Extract()
    80  		th.AssertNoErr(t, err)
    81  	})
    82  
    83  	createOpts := domain.CreateOpts{
    84  		GatewayID: apiGwID,
    85  		GroupID:   grp.ID,
    86  		UrlDomain: rs.Name,
    87  	}
    88  	t.Logf("Attempting to create API Gateway Domain")
    89  	dom, err := domain.Create(client, createOpts)
    90  	th.AssertNoErr(t, err)
    91  	t.Cleanup(func() {
    92  		t.Logf("Attempting to delete API Gateway Domain")
    93  		th.AssertNoErr(t, domain.Delete(client, domain.DeleteOpts{
    94  			GatewayID: apiGwID,
    95  			GroupID:   grp.ID,
    96  			DomainID:  dom.ID,
    97  		}))
    98  	})
    99  
   100  	updateOpts := domain.UpdateOpts{
   101  		GatewayID:     apiGwID,
   102  		GroupID:       grp.ID,
   103  		DomainID:      dom.ID,
   104  		MinSslVersion: "TLSv1.2",
   105  	}
   106  	t.Logf("Attempting to update API Gateway Domain")
   107  	domUpdated, err := domain.Update(client, updateOpts)
   108  	th.AssertNoErr(t, err)
   109  	th.AssertEquals(t, "TLSv1.2", domUpdated.MinSslVersion)
   110  
   111  	t.Logf("Attempting to asssign API Gateway Domain Certificate")
   112  	certName := tools.RandomString("acc_domain_certificate_", 5)
   113  	certOpts := domain.CreateCertOpts{
   114  		GatewayID:  apiGwID,
   115  		GroupID:    grp.ID,
   116  		DomainID:   dom.ID,
   117  		Content:    certificate,
   118  		PrivateKey: privateKey,
   119  		Name:       certName,
   120  	}
   121  	domCertificate, err := domain.AssignCertificate(client, certOpts)
   122  	th.AssertNoErr(t, err)
   123  
   124  	t.Cleanup(func() {
   125  		t.Logf("Attempting to delete API Gateway Domain Certificate")
   126  		th.AssertNoErr(t, domain.UnbindCertificate(client, domain.CertificateOpts{
   127  			GatewayID:     apiGwID,
   128  			GroupID:       grp.ID,
   129  			DomainID:      dom.ID,
   130  			CertificateID: domCertificate.ID,
   131  		}))
   132  	})
   133  
   134  	t.Logf("Attempting to get API Gateway Domain Certificate")
   135  	getCert, err := domain.GetCertificate(client, domain.CertificateOpts{
   136  		GatewayID:     apiGwID,
   137  		GroupID:       grp.ID,
   138  		DomainID:      dom.ID,
   139  		CertificateID: domCertificate.ID,
   140  	})
   141  	th.AssertNoErr(t, err)
   142  	th.AssertEquals(t, certName, getCert.Name)
   143  }
   144  
   145  func CreateDns(client *golangsdk.ServiceClient, t *testing.T) *recordsets.RecordSet {
   146  	zoneName := "otc-acc.test-gateway.com"
   147  	createOpts := zones.CreateOpts{
   148  		Description: "api gw public zone",
   149  		Name:        zoneName,
   150  		TTL:         300,
   151  	}
   152  	zone, err := zones.Create(client, createOpts).Extract()
   153  	th.AssertNoErr(t, err)
   154  
   155  	recordOpts := recordsets.CreateOpts{
   156  		Name:        "domain." + zone.Name,
   157  		Description: "record set api gw",
   158  		Records:     []string{"10.0.0.20"},
   159  		Type:        "A",
   160  	}
   161  	recordSet, err := recordsets.Create(client, zone.ID, recordOpts).Extract()
   162  	th.AssertNoErr(t, err)
   163  
   164  	return recordSet
   165  }