github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/obs/v1/obs_test.go (about)

     1  package v1
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
    10  	"github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools"
    11  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/obs"
    12  	th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
    13  )
    14  
    15  func TestObsBucketLifecycle(t *testing.T) {
    16  	client, err := clients.NewOBSClient()
    17  	th.AssertNoErr(t, err)
    18  
    19  	bucketName := strings.ToLower(tools.RandomString("obs-sdk-test", 5))
    20  
    21  	_, err = client.CreateBucket(&obs.CreateBucketInput{
    22  		Bucket: bucketName,
    23  	})
    24  	t.Cleanup(func() {
    25  		_, err = client.DeleteBucket(bucketName)
    26  		th.AssertNoErr(t, err)
    27  	})
    28  	th.AssertNoErr(t, err)
    29  
    30  	_, err = client.SetBucketEncryption(&obs.SetBucketEncryptionInput{
    31  		Bucket: bucketName,
    32  		BucketEncryptionConfiguration: obs.BucketEncryptionConfiguration{
    33  			SSEAlgorithm: "kms",
    34  		},
    35  	})
    36  	th.AssertNoErr(t, err)
    37  
    38  	bucketHead, err := client.GetBucketMetadata(&obs.GetBucketMetadataInput{
    39  		Bucket: bucketName,
    40  	})
    41  	th.AssertNoErr(t, err)
    42  	th.AssertEquals(t, bucketHead.FSStatus, obs.FSStatusDisabled)
    43  	th.AssertEquals(t, bucketHead.Version, "3.0")
    44  }
    45  
    46  func TestObsBucketLifecyclePolicy(t *testing.T) {
    47  	client, err := clients.NewOBSClient()
    48  	th.AssertNoErr(t, err)
    49  
    50  	bucketName := strings.ToLower(tools.RandomString("obs-sdk-test", 5))
    51  
    52  	_, err = client.CreateBucket(&obs.CreateBucketInput{
    53  		Bucket: bucketName,
    54  	})
    55  	t.Cleanup(func() {
    56  		_, err = client.DeleteBucket(bucketName)
    57  		th.AssertNoErr(t, err)
    58  	})
    59  	th.AssertNoErr(t, err)
    60  
    61  	objectName := tools.RandomString("test-obs-", 5)
    62  
    63  	_, err = client.PutObject(&obs.PutObjectInput{
    64  		PutObjectBasicInput: obs.PutObjectBasicInput{
    65  			ObjectOperationInput: obs.ObjectOperationInput{
    66  				Bucket: bucketName,
    67  				Key:    objectName,
    68  			},
    69  		},
    70  	})
    71  	th.AssertNoErr(t, err)
    72  
    73  	t.Cleanup(func() {
    74  		_, err = client.DeleteObject(&obs.DeleteObjectInput{
    75  			Bucket: bucketName,
    76  			Key:    objectName,
    77  		})
    78  		th.AssertNoErr(t, err)
    79  	})
    80  
    81  	_, err = client.SetBucketLifecycleConfiguration(
    82  		&obs.SetBucketLifecycleConfigurationInput{
    83  			Bucket: bucketName,
    84  			BucketLifecycleConfiguration: obs.BucketLifecycleConfiguration{
    85  				LifecycleRules: []obs.LifecycleRule{
    86  					{
    87  						Prefix: "path1/",
    88  						Status: "Enabled",
    89  						Transitions: []obs.Transition{
    90  							{
    91  								Days:         30,
    92  								StorageClass: "COLD",
    93  							},
    94  						},
    95  						Expiration: obs.Expiration{
    96  							Days: 60,
    97  						},
    98  					},
    99  				},
   100  			},
   101  		},
   102  	)
   103  	th.AssertNoErr(t, err)
   104  
   105  	config, err := client.GetBucketLifecycleConfiguration(bucketName)
   106  	th.AssertNoErr(t, err)
   107  	th.AssertEquals(t, config.BucketLifecycleConfiguration.LifecycleRules[0].Expiration.Days, 60)
   108  
   109  	t.Cleanup(func() {
   110  		_, err := client.DeleteBucketLifecycleConfiguration(bucketName)
   111  		th.AssertNoErr(t, err)
   112  	})
   113  
   114  }
   115  
   116  func TestObsPolicyLifecycle(t *testing.T) {
   117  	client, err := clients.NewOBSClient()
   118  	th.AssertNoErr(t, err)
   119  
   120  	bucketName := strings.ToLower(tools.RandomString("obs-sdk-test", 5))
   121  
   122  	_, err = client.CreateBucket(&obs.CreateBucketInput{
   123  		Bucket: bucketName,
   124  	})
   125  	t.Cleanup(func() {
   126  		_, err = client.DeleteBucket(bucketName)
   127  		th.AssertNoErr(t, err)
   128  	})
   129  	th.AssertNoErr(t, err)
   130  
   131  	objectName := tools.RandomString("test-obs-", 5)
   132  
   133  	_, err = client.PutObject(&obs.PutObjectInput{
   134  		PutObjectBasicInput: obs.PutObjectBasicInput{
   135  			ObjectOperationInput: obs.ObjectOperationInput{
   136  				Bucket: bucketName,
   137  				Key:    objectName,
   138  			},
   139  		},
   140  	})
   141  	th.AssertNoErr(t, err)
   142  
   143  	t.Cleanup(func() {
   144  		_, err = client.DeleteObject(&obs.DeleteObjectInput{
   145  			Bucket: bucketName,
   146  			Key:    objectName,
   147  		})
   148  		th.AssertNoErr(t, err)
   149  	})
   150  
   151  	policy := fmt.Sprintf(
   152  		`{
   153    "Statement": [
   154      {
   155        "Effect": "Allow",
   156        "Principal": {
   157          "ID": [
   158            "*"
   159          ]
   160        },
   161        "Action": [
   162          "*"
   163        ],
   164        "Resource": [
   165          "%[1]s/*",
   166          "%[1]s"
   167        ]
   168      }
   169    ]
   170  }`, bucketName)
   171  
   172  	policyInput := &obs.SetBucketPolicyInput{
   173  		Bucket: bucketName,
   174  		Policy: policy,
   175  	}
   176  	_, err = client.SetBucketPolicy(policyInput)
   177  	th.AssertNoErr(t, err)
   178  
   179  	t.Cleanup(func() {
   180  		_, err = client.DeleteBucketPolicy(bucketName)
   181  		th.AssertNoErr(t, err)
   182  	})
   183  
   184  	_, err = client.GetBucketPolicy(bucketName)
   185  	th.AssertNoErr(t, err)
   186  }
   187  
   188  func TestObsReplicationLifecycle(t *testing.T) {
   189  	client, err := clients.NewOBSClient()
   190  	th.AssertNoErr(t, err)
   191  
   192  	if os.Getenv("OS_AGENCY") == "" || os.Getenv("OS_DESTINATION_BUCKET") == "" {
   193  		t.Skip("Agency or bucket is not provided for the test.")
   194  	}
   195  
   196  	bucketName := strings.ToLower(tools.RandomString("obs-sdk-test", 5))
   197  	bucketNameDest := os.Getenv("OS_DESTINATION_BUCKET")
   198  	agencyName := os.Getenv("OS_AGENCY")
   199  
   200  	_, err = client.CreateBucket(&obs.CreateBucketInput{
   201  		Bucket: bucketName,
   202  	})
   203  	t.Cleanup(func() {
   204  		_, err = client.DeleteBucket(bucketName)
   205  		th.AssertNoErr(t, err)
   206  	})
   207  	th.AssertNoErr(t, err)
   208  
   209  	_, err = client.SetBucketReplication(
   210  		&obs.SetBucketReplicationInput{
   211  			Bucket: bucketName,
   212  			BucketReplicationConfiguration: obs.BucketReplicationConfiguration{
   213  				Agency: agencyName,
   214  				ReplicationRules: []obs.ReplicationRule{
   215  					{
   216  						Prefix:            "",
   217  						Status:            "Enabled",
   218  						DestinationBucket: bucketNameDest,
   219  						DeleteData:        "Enabled",
   220  					},
   221  				},
   222  			},
   223  		})
   224  	th.AssertNoErr(t, err)
   225  
   226  	replication, err := client.GetBucketReplication(bucketName)
   227  	th.AssertNoErr(t, err)
   228  	th.AssertEquals(t, replication.StatusCode, 200)
   229  	th.AssertEquals(t, replication.Agency, agencyName)
   230  	th.AssertEquals(t, replication.ReplicationRules[0].DeleteData, obs.EnabledType("Enabled"))
   231  	th.AssertEquals(t, replication.ReplicationRules[0].Status, obs.RuleStatusType("Enabled"))
   232  
   233  	_, err = client.DeleteBucketReplication(bucketName)
   234  	th.AssertNoErr(t, err)
   235  }
   236  
   237  func TestOBSObjectLock(t *testing.T) {
   238  	client, err := clients.NewOBSClient()
   239  	th.AssertNoErr(t, err)
   240  
   241  	bucketName := strings.ToLower(tools.RandomString("obs-sdk-test-", 5))
   242  
   243  	_, err = client.CreateBucket(&obs.CreateBucketInput{
   244  		Bucket:            bucketName,
   245  		ObjectLockEnabled: true,
   246  	})
   247  	t.Cleanup(func() {
   248  		_, err = client.DeleteBucket(bucketName)
   249  		th.AssertNoErr(t, err)
   250  	})
   251  	th.AssertNoErr(t, err)
   252  
   253  	wormOpts := obs.SetWORMPolicyInput{
   254  		Bucket: bucketName,
   255  		BucketWormPolicy: obs.BucketWormPolicy{
   256  			ObjectLockEnabled: "Enabled",
   257  			Mode:              "COMPLIANCE",
   258  			Days:              "10",
   259  		},
   260  	}
   261  	_, err = client.SetWORMPolicy(&wormOpts)
   262  	th.AssertNoErr(t, err)
   263  
   264  	getPolicy, err := client.GetWORMPolicy(bucketName)
   265  	th.AssertNoErr(t, err)
   266  
   267  	th.AssertEquals(t, wormOpts.Days, getPolicy.Days)
   268  
   269  	// disable object lock
   270  	wormOpts.BucketWormPolicy = obs.BucketWormPolicy{}
   271  	_, err = client.SetWORMPolicy(&wormOpts)
   272  	th.AssertNoErr(t, err)
   273  }
   274  
   275  func TestOBSCustomDomain(t *testing.T) {
   276  	client, err := clients.NewOBSClient()
   277  	th.AssertNoErr(t, err)
   278  
   279  	bucketName := strings.ToLower(tools.RandomString("obs-sdk-test-", 5))
   280  
   281  	_, err = client.CreateBucket(&obs.CreateBucketInput{
   282  		Bucket: bucketName,
   283  	})
   284  	t.Cleanup(func() {
   285  		_, err = client.DeleteBucket(bucketName)
   286  		th.AssertNoErr(t, err)
   287  	})
   288  	th.AssertNoErr(t, err)
   289  
   290  	domainName := "www.test.com"
   291  
   292  	input := &obs.SetBucketCustomDomainInput{
   293  		Bucket:       bucketName,
   294  		CustomDomain: domainName,
   295  	}
   296  	_, err = client.SetBucketCustomDomain(input)
   297  	th.AssertNoErr(t, err)
   298  
   299  	output, err := client.GetBucketCustomDomain(bucketName)
   300  	th.AssertNoErr(t, err)
   301  
   302  	tools.PrintResource(t, output)
   303  
   304  	inputDelete := &obs.DeleteBucketCustomDomainInput{
   305  		Bucket:       bucketName,
   306  		CustomDomain: domainName,
   307  	}
   308  
   309  	_, err = client.DeleteBucketCustomDomain(inputDelete)
   310  	th.AssertNoErr(t, err)
   311  }