From fea10ce12076058af33fa01070c3aa54cb81c454 Mon Sep 17 00:00:00 2001 From: contabo Date: Thu, 21 Apr 2022 13:14:49 +0000 Subject: [PATCH] release 1.1.2 --- bats/cleanup-object-storage.bash | 38 +- bats/create_bucket.bats | 64 --- bats/create_object.bats | 84 ---- bats/create_object_storage.bats | 48 --- bats/delete_bucket.bats | 54 --- bats/delete_object.bats | 84 ---- bats/get_buckets.bats | 101 ----- bats/get_credentials_object_storage.bats | 24 -- bats/get_object.bats | 64 --- bats/get_object_storage.bats | 53 --- bats/get_object_storage_stats.bats | 49 --- bats/get_object_storages.bats | 38 -- bats/get_objects.bats | 62 --- bats/globals.bash | 1 + bats/history_object_storage.bats | 76 ---- bats/object_storage.bats | 513 +++++++++++++++++++++++ bats/resize_object_storage.bats | 61 --- cmd/config.go | 2 +- cmd/objects/create.go | 17 +- cmd/objects/delete.go | 6 +- 20 files changed, 530 insertions(+), 909 deletions(-) delete mode 100644 bats/create_bucket.bats delete mode 100644 bats/create_object.bats delete mode 100644 bats/create_object_storage.bats delete mode 100644 bats/delete_bucket.bats delete mode 100644 bats/delete_object.bats delete mode 100644 bats/get_buckets.bats delete mode 100644 bats/get_credentials_object_storage.bats delete mode 100644 bats/get_object.bats delete mode 100644 bats/get_object_storage.bats delete mode 100644 bats/get_object_storage_stats.bats delete mode 100644 bats/get_object_storages.bats delete mode 100644 bats/get_objects.bats delete mode 100644 bats/history_object_storage.bats create mode 100644 bats/object_storage.bats delete mode 100644 bats/resize_object_storage.bats diff --git a/bats/cleanup-object-storage.bash b/bats/cleanup-object-storage.bash index 1f9ac5a..3286857 100644 --- a/bats/cleanup-object-storage.bash +++ b/bats/cleanup-object-storage.bash @@ -9,7 +9,6 @@ KEYCLOAK_PASSWORD="${KEYCLOAK_PASSWORD:-pass}" KEYCLOACK_CLIENT_ID="${KEYCLOACK_CLIENT_ID:-admin-cli}" DELETE_URL="${DELETE_URL:-https://storage-object-storage-dev-int.contabo.intra/internal/v1/object-storages/}" - getInternalToken() { TOKEN=$(curl -s \ -d "client_id=${KEYCLOACK_CLIENT_ID}" \ @@ -30,7 +29,6 @@ getInternalToken() { } deleteObjectStorage() { - local internal_token=$(getInternalToken) curl -s -k -X DELETE "${DELETE_URL}$1" \ -H "x-request-id: 8246fe75-dc7d-4aeb-9381-750e22f9c2ba" \ @@ -41,44 +39,22 @@ deleteObjectStorage() { echo "deleted $1" } -deleteObjectsInBucketIfExisting(){ - ./cntb delete object --region "$1" --bucket "$2" --path "test" -} - -deleteBucketsInRegionIfExisting(){ - local buckets=$(./cntb get buckets -r "$1" -o=json) - - if [[ "$buckets" != "null" ]]; then - local bucketnames=$(echo "$buckets" | jq -r '.[].name') - - local buckets_array=(`echo ${bucketnames}`) - - local num_of_buckets=${#buckets_array[@]} - - for (( i=0; i<${num_of_buckets}; i++ )); do - deleteObjectsInBucketIfExisting "$1" ${buckets_array[$i]} - ./cntb delete bucket "$1" ${buckets_array[$i]} - done - fi -} - getObjectStorageInRegion(){ OBJECTSTORAGE=$(./cntb get objectStorages --regionName "$1" -o=json) OBJECTSORAGEID=$(echo "$OBJECTSTORAGE" | jq -r '.[].objectStorageId') echo "$OBJECTSORAGEID" } -deleteObjectStorageIfExisting() { +deleteObjectStorageIfExisting(){ existingObjectStorage=$(getObjectStorageInRegion "$1") if [ ! -z "$existingObjectStorage" ] ; then - deleteBucketsInRegionIfExisting "$1" - deleteObjectStorage "$existingObjectStorage" + deleteObjectStorage "$existingObjectStorage" - sleep 4 + sleep 8 - deleteObjectStorageIfExisting "$1" - else - sleep 4 + deleteObjectStorageIfExisting "$1" + else + sleep 8 fi -} +} \ No newline at end of file diff --git a/bats/create_bucket.bats b/bats/create_bucket.bats deleted file mode 100644 index 11d2a0e..0000000 --- a/bats/create_bucket.bats +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files -load globals -load cleanup-object-storage -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'create buckets : ok : command line flags' { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success -} - -@test 'create buckets : ok' { - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success -} - -@test 'create buckets : nok : Invalid name' { - run ./cntb create bucket EU 'T..${TEST_SUFFIX}' - assert_failure - assert_output --partial 'Could not create bucket T..${TEST_SUFFIX}. Name may contain unaccepted characters.' -} - -@test 'create buckets : nok : Invalid region' { - run ./cntb create bucket DE 'T..${TEST_SUFFIX}' - assert_failure - assert_output --partial 'No Object Storage could be found in this region.' - - deleteObjectStorageIfExisting "EU" -} - - -@test 'create buckets : nok : missing argument' { - run ./cntb create bucket 'T..${TEST_SUFFIX}' - assert_failure - assert_output --partial 'Please provide a region and a bucketName' - - run ./cntb create bucket EU - assert_failure - assert_output --partial 'Please provide a region and a bucketName' -} - diff --git a/bats/create_object.bats b/bats/create_object.bats deleted file mode 100644 index 24b4928..0000000 --- a/bats/create_object.bats +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'create object : ok : create folder' { - - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - deleteObjectStorageIfExisting "EU" - sleep 5 - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb create object --region "EU" --bucket ${TEST_SUFFIX} --prefix '/test/folder' - assert_success - - run ./cntb delete object --region "EU" --bucket ${TEST_SUFFIX} --path 'test/folder' - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success - -} - -@test 'create object : ok : upload file' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb create object --region "EU" --bucket ${TEST_SUFFIX} --prefix '/test/folder' --path "go.sum" - assert_success - - run ./cntb delete object --region "EU" --bucket ${TEST_SUFFIX} --path 'test/folder/go.sum' - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success - - deleteObjectStorageIfExisting "EU" -} - - - -@test 'create object : nok : missing argument' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - run ./cntb create object --bucket ${TEST_SUFFIX} --prefix '/test/${TEST_SUFFIX}' --path "go.sum" - assert_failure - assert_output --partial 'Argument region is empty.' - - run ./cntb create object --region "EU" --prefix '/test/${TEST_SUFFIX}' --path "go.sum" - assert_failure - assert_output --partial 'Argument bucket is empty.' - - run ./cntb create object --region "EU" --bucket ${TEST_SUFFIX} --path "go.sum" - assert_failure - assert_output --partial 'Argument prefix is empty.' -} - - diff --git a/bats/create_object_storage.bats b/bats/create_object_storage.bats deleted file mode 100644 index 17f63be..0000000 --- a/bats/create_object_storage.bats +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig -} - -function teardown_file() { - restore_config_files -} - -@test "create objectStorage with auto scaling normal: ok" { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - objectStorageId="$output" -} - -@test "create objectStorage with scalingLimit when scalingState inactive: ok" { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 10 - assert_success - objectStorageId="$output" -} - -@test "create objectStorage with non existing region : nok" { - run ./cntb create objectStorage --region "FOO" --totalPurchasedSpaceTB 1 --scalingState "disabled" - assert_failure -} - - -@test "create objectStorage missing totalPurchasedSpace: nok" { - run ./cntb create objectStorage --productId 1 --region "EU" --scalingState "enabled" - assert_failure -} - -@test "create objectStorage missing scalingLimit when scalingState active: nok" { - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" - assert_failure -} diff --git a/bats/delete_bucket.bats b/bats/delete_bucket.bats deleted file mode 100644 index 180d8fe..0000000 --- a/bats/delete_bucket.bats +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'delete bucket : ok' { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb delete EU bucket EU ${TEST_SUFFIX} - assert_success -} - -@test 'delete bucket : nok : not existing' { - run ./cntb delete bucket EU a19b8645-79d2-4fbb-ac56-a927d69b8d2b - assert_failure - assert_output --partial 'The specified bucket does not exist.' - - deleteObjectStorageIfExisting "EU" -} - -@test 'delete bucket : nok : missing argument' { - run ./cntb delete bucket EU - assert_failure - assert_output --partial 'Please provide a region and a bucketName' - - run ./cntb delete bucket bucket123 - assert_failure - assert_output --partial 'Please provide a region and a bucketName' -} - -@test 'delete buckets : nok : Invalid region' { - run ./cntb delete bucket USA "${TEST_SUFFIX}" - assert_failure - assert_output --partial 'No Object Storage could be found in this region.' -} diff --git a/bats/delete_object.bats b/bats/delete_object.bats deleted file mode 100644 index 5c2d33d..0000000 --- a/bats/delete_object.bats +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'delete object : ok ' { - - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - deleteObjectStorageIfExisting "EU" - sleep 5 - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb create object --region "EU" --bucket ${TEST_SUFFIX} --prefix '/test/folder' - assert_success - - run ./cntb delete object --region "EU" --bucket ${TEST_SUFFIX} --path 'test/folder' - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success - -} - -@test 'delete object : ok : delete file' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb create object --region "EU" --bucket ${TEST_SUFFIX} --prefix '/test/folder' --path "go.sum" - assert_success - - run ./cntb delete object --region "EU" --bucket ${TEST_SUFFIX} --path 'test/folder/go.sum' - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success - - deleteObjectStorageIfExisting "EU" -} - - - -@test 'delete object : nok : missing argument' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - run ./cntb delete object --bucket ${TEST_SUFFIX} --path '/test/${TEST_SUFFIX}' - assert_failure - assert_output --partial 'Argument region is empty.' - - run ./cntb delete object --region "EU" --path '/test/${TEST_SUFFIX}' - assert_failure - assert_output --partial 'Argument bucket is empty.' - - run ./cntb delete object --region "EU" --bucket ${TEST_SUFFIX} - assert_failure - assert_output --partial 'Argument path is empty.' -} - - diff --git a/bats/get_buckets.bats b/bats/get_buckets.bats deleted file mode 100644 index 96b960f..0000000 --- a/bats/get_buckets.bats +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'get buckets : ok' { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb get buckets - assert_success - assert_output --partial 'NAME' - - run ./cntb delete EU ${TEST_SUFFIX} - assert_success -} - -@test 'get buckets wide: ok' { - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb get buckets -o wide - assert_success - - assert_output --partial 'NAME' - assert_output --partial 'CREATIONDATE' - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success -} - -@test 'get buckets : ok : format json' { - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb get buckets -o json - assert_success - - assert_output --partial '"creationDate"' - assert_output --partial '"name"' - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success -} - -@test 'get buckets : ok : format yaml' { - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb get buckets -o json - assert_success - - assert_output --partial '"creationDate":' - assert_output --partial '"name":' - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success -} - -@test 'get buckets : ok : specify region' { - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb get buckets -r EU - assert_success - - assert_output --partial 'NAME' - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success - - deleteObjectStorageIfExisting "EU" -} - - -@test 'get buckets : nok : specify invalid region' { - run ./cntb get buckets -r EUO - assert_failure - assert_output --partial 'No Object Storage could be found in this region' -} diff --git a/bats/get_credentials_object_storage.bats b/bats/get_credentials_object_storage.bats deleted file mode 100644 index b4660d8..0000000 --- a/bats/get_credentials_object_storage.bats +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig -} - -function teardown_file() { - restore_config_files -} - -# on hold until credentials are moved to users api - -# @test 'get object storage: normal ok' { -# run ./cntb get objectStorage credentials -# assert_success -# assert_output --partial 'ACCESSKEY' -# assert_output --partial 'SECRETKEY' -# } \ No newline at end of file diff --git a/bats/get_object.bats b/bats/get_object.bats deleted file mode 100644 index d2510e5..0000000 --- a/bats/get_object.bats +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'get object : ok' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - deleteObjectStorageIfExisting "EU" - sleep 5 - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb create object --region "EU" --bucket ${TEST_SUFFIX} --prefix '/test/folder' - assert_success - - run ./cntb get object --region "EU" --bucket ${TEST_SUFFIX} --path '/test/folder' - assert_success - - run ./cntb delete object --region "EU" --bucket ${TEST_SUFFIX} --path 'test/folder' - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success - - deleteObjectStorageIfExisting "EU" -} - -@test 'get object : nok : missing arguments' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - run ./cntb get object --bucket ${TEST_SUFFIX} --path ${TEST_SUFFIX} - assert_failure - assert_output --partial 'Argument region is empty.' - - run ./cntb get object --region "EU" --path ${TEST_SUFFIX} - assert_failure - assert_output --partial 'Argument bucket is empty.' - - run ./cntb get object --region "EU" --bucket ${TEST_SUFFIX} - assert_failure - assert_output --partial 'Argument path is empty' - -} diff --git a/bats/get_object_storage.bats b/bats/get_object_storage.bats deleted file mode 100644 index 3e29023..0000000 --- a/bats/get_object_storage.bats +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'get object storage: normal ok' { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - objectStorageId="$output" - - run ./cntb get objectStorage "${objectStorageId}" - assert_success - assert_output --partial 'OBJECTSTORAGEID' - assert_output --partial 'DATACENTER' - assert_output --partial 'REGION' - assert_output --partial 'CREATEDDATE' - assert_output --partial 'TOTALPURCHASEDSPACETB' -} - -@test 'get object storage: wide ok' { - objectStorageId=$(getObjectStorageInRegion "EU") - - run ./cntb get objectStorage "${objectStorageId}" -o wide - assert_success - assert_output --partial 'OBJECTSTORAGEID' - assert_output --partial 'DATACENTER' - assert_output --partial 'REGION' - assert_output --partial 'CREATEDDATE' - assert_output --partial 'STATUS' - assert_output --partial 'TOTALPURCHASEDSPACETB' - assert_output --partial 'S3URL' -} - -@test 'get object storage: nok :objectStorageId not UUID' { - run ./cntb get objectStorage 100 - assert_failure - assert_output --partial 'Error while retrieving object storage: 400 - [objectStorageId must be a UUID]' -} diff --git a/bats/get_object_storage_stats.bats b/bats/get_object_storage_stats.bats deleted file mode 100644 index b5ecebd..0000000 --- a/bats/get_object_storage_stats.bats +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'get object storage stats : ok' { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - objectStorageId="$output" - - run ./cntb stats objectStorage "${objectStorageId}" - assert_success - assert_output --partial 'USEDSPACETB' - assert_output --partial 'USEDSPACEPERCENTAGE' - assert_output --partial 'NUMBEROFOBJECTS' - - run ./cntb stats objectStorage "${objectStorageId}" -o json - assert_success - assert_output --partial '"customerId"' - assert_output --partial '"numberOfObjects"' - assert_output --partial '"tenantId"' - assert_output --partial '"usedSpacePercentage"' - assert_output --partial '"usedSpaceTB"' -} - -@test 'get object storage stats no objectStorageId : nok' { - run ./cntb stats objectStorage - assert_failure -} - -@test 'get object storage stats wrong objectStorageId : nok' { - run ./cntb stats objectStorage 3162351f-456b-423a-b127-ab77baaa4e48 - assert_failure -} \ No newline at end of file diff --git a/bats/get_object_storages.bats b/bats/get_object_storages.bats deleted file mode 100644 index 6624673..0000000 --- a/bats/get_object_storages.bats +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'get object storages: normal ok' { - run ./cntb get objectStorages -s 2 - assert_success - assert_output --partial 'OBJECTSTORAGEID' - assert_output --partial 'DATACENTER' - assert_output --partial 'REGION' - assert_output --partial 'CREATEDDATE' - assert_output --partial 'TOTALPURCHASEDSPACETB' -} - -@test 'get object storages: wide ok' { - run ./cntb get objectStorages -o wide -s 2 - assert_success - assert_output --partial 'OBJECTSTORAGEID' - assert_output --partial 'DATACENTER' - assert_output --partial 'REGION' - assert_output --partial 'CREATEDDATE' - assert_output --partial 'STATUS' - assert_output --partial 'TOTALPURCHASEDSPACETB' - assert_output --partial 'S3URL' -} diff --git a/bats/get_objects.bats b/bats/get_objects.bats deleted file mode 100644 index 340786b..0000000 --- a/bats/get_objects.bats +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig - deleteCache -} - -function teardown_file() { - restore_config_files -} - -@test 'get objects : ok' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - deleteObjectStorageIfExisting "EU" - sleep 5 - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - - run ./cntb create bucket EU ${TEST_SUFFIX} - assert_success - - run ./cntb create object --region "EU" --bucket ${TEST_SUFFIX} --prefix '/test/folder' - assert_success - - run ./cntb get objects --region "EU" --bucket ${TEST_SUFFIX} - assert_success - assert_output --partial 'NAME' - assert_output --partial 'SIZE' - assert_output --partial 'LASTMODIFIED' - - run ./cntb delete object --region "EU" --bucket ${TEST_SUFFIX} --path 'test/folder' - assert_success - - run ./cntb delete bucket EU ${TEST_SUFFIX} - assert_success - - deleteObjectStorageIfExisting "EU" -} - -@test 'get objects : nok : missing arguments' { - if [ ${INT_ENVIRONMENT} == 'test' ]; then - skip "Skip: test env has no CMS backend" - fi - - run ./cntb get objects --bucket ${TEST_SUFFIX} - assert_failure - assert_output --partial 'Argument region is empty.' - - run ./cntb get objects --region "EU" - assert_failure - assert_output --partial 'Argument bucket is empty.' -} diff --git a/bats/globals.bash b/bats/globals.bash index 89eaefc..bdd2dae 100644 --- a/bats/globals.bash +++ b/bats/globals.bash @@ -4,6 +4,7 @@ CURRENTEPOCTIME=`date +%s` CURRENTEPOCTIME_NANAO=`date +%s%N` USER_ID="${OAUTH2_USER_ID:-3e97f2b0-eccd-497b-8516-79a6708a9cf4}" TEST_SUFFIX="$CURRENTEPOCTIME-integration-cli" +TEST_BUCKET_NAME="test123-integration-cli" IMAGE_DOWNLOAD_URL='https://dl-cdn.alpinelinux.org/alpine/v3.13/releases/s390x/alpine-standard-3.13.5-s390x.iso' INSTANCE_ID=100 REINSTALL_INSTANCE_ID=105 diff --git a/bats/history_object_storage.bats b/bats/history_object_storage.bats deleted file mode 100644 index c32da71..0000000 --- a/bats/history_object_storage.bats +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig -} - -function teardown_file() { - restore_config_files -} - -@test 'get object storage history : ok' { - run ./cntb history objectStorages - assert_success - assert_output --partial 'ID' - assert_output --partial 'OBJECTSTORAGEID' - assert_output --partial 'ACTION' - assert_output --partial 'USERNAME' - assert_output --partial 'TIMESTAMP' -} - -@test 'get object storage history : ok : format wide' { - run ./cntb history objectStorages -o wide - assert_success - assert_output --partial 'ID' - assert_output --partial 'OBJECTSTORAGEID' - assert_output --partial 'ACTION' - assert_output --partial 'TIMESTAMP' - assert_output --partial 'USERNAME' - assert_output --partial 'CHANGEDBY' - assert_output --partial 'REQUESTID' - assert_output --partial 'TRACEID' - assert_output --partial 'CHANGES' -} - -@test 'get object storage history : ok : format json' { - run ./cntb history objectStorages -o json - assert_success - assert_output --partial '"id"' - assert_output --partial '"objectStorageId"' - assert_output --partial '"action"' - assert_output --partial '"timestamp"' - assert_output --partial '"username"' - assert_output --partial '"changedBy"' - assert_output --partial '"requestId"' - assert_output --partial '"traceId"' - assert_output --partial '"changes"' -} - -@test 'get object storage history : ok : filter by objectStorageId' { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - objectStorageId="$output" - - deleteObjectStorage ${objectStorageId} - - run ./cntb history objectStorages --objectStorageId "$objectStorageId" - assert_success - - # header - assert_output --partial 'ID' - assert_output --partial 'OBJECTSTORAGEID' - assert_output --partial 'ACTION' - assert_output --partial 'TIMESTAMP' - # content - assert_output --partial 'CREATED' - assert_output --partial 'DELETED' -} \ No newline at end of file diff --git a/bats/object_storage.bats b/bats/object_storage.bats new file mode 100644 index 0000000..684de8f --- /dev/null +++ b/bats/object_storage.bats @@ -0,0 +1,513 @@ +#!/usr/bin/env bats + +load handling_conf_files.bash +load globals.bash +load cleanup-object-storage.bash +load_lib bats-support +load_lib bats-assert + +function setup_file() { + store_config_files + ensureTestConfig + deleteCache +} + +function teardown_file() { + restore_config_files +} + +## Positive Tests + +## create object storage +@test "create object storage with auto scaling normal: ok" { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + deleteObjectStorageIfExisting "EU" + + sleep 10 + + run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 + assert_success + objectStorageId="$output" +} + +## get object storage normal output +@test 'get object storage normal output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + objectStorageId=$(getObjectStorageInRegion "EU") + + run ./cntb get objectStorage "${objectStorageId}" + assert_success + assert_output --partial 'OBJECTSTORAGEID' + assert_output --partial 'DATACENTER' + assert_output --partial 'REGION' + assert_output --partial 'CREATEDDATE' + assert_output --partial 'TOTALPURCHASEDSPACETB' +} + +## get object storage wide output +@test 'get object storage wide output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + objectStorageId=$(getObjectStorageInRegion "EU") + + run ./cntb get objectStorage "${objectStorageId}" -o wide + assert_success + assert_output --partial 'OBJECTSTORAGEID' + assert_output --partial 'DATACENTER' + assert_output --partial 'REGION' + assert_output --partial 'CREATEDDATE' + assert_output --partial 'STATUS' + assert_output --partial 'TOTALPURCHASEDSPACETB' + assert_output --partial 'S3URL' +} + +## list object storages normal output +@test 'list object storages normal output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get objectStorages -s 2 + assert_success + assert_output --partial 'OBJECTSTORAGEID' + assert_output --partial 'DATACENTER' + assert_output --partial 'REGION' + assert_output --partial 'CREATEDDATE' + assert_output --partial 'TOTALPURCHASEDSPACETB' +} + +## list object storages wide output +@test 'list object storages wide output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get objectStorages -o wide -s 2 + assert_success + assert_output --partial 'OBJECTSTORAGEID' + assert_output --partial 'DATACENTER' + assert_output --partial 'REGION' + assert_output --partial 'CREATEDDATE' + assert_output --partial 'STATUS' + assert_output --partial 'TOTALPURCHASEDSPACETB' + assert_output --partial 'S3URL' +} + +## get object storage stats normal output +@test 'get object storage stats normal output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + objectStorageId=$(getObjectStorageInRegion "EU") + + run ./cntb stats objectStorage "${objectStorageId}" + assert_success + assert_output --partial 'USEDSPACETB' + assert_output --partial 'USEDSPACEPERCENTAGE' + assert_output --partial 'NUMBEROFOBJECTS' +} + +## get object storage stats json output +@test 'get object storage stats json output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + objectStorageId=$(getObjectStorageInRegion "EU") + + run ./cntb stats objectStorage "${objectStorageId}" -o json + assert_success + assert_output --partial '"customerId"' + assert_output --partial '"numberOfObjects"' + assert_output --partial '"tenantId"' + assert_output --partial '"usedSpacePercentage"' + assert_output --partial '"usedSpaceTB"' +} + +## get object storages audit trail normal output +@test 'get object storages history: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb history objectStorages + assert_success + assert_output --partial 'ID' + assert_output --partial 'OBJECTSTORAGEID' + assert_output --partial 'ACTION' + assert_output --partial 'USERNAME' + assert_output --partial 'TIMESTAMP' +} + +## get object storages audit trail wide output +@test 'get object storages history wide output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb history objectStorages -o wide + assert_success + assert_output --partial 'ID' + assert_output --partial 'OBJECTSTORAGEID' + assert_output --partial 'ACTION' + assert_output --partial 'TIMESTAMP' + assert_output --partial 'USERNAME' + assert_output --partial 'CHANGEDBY' + assert_output --partial 'REQUESTID' + assert_output --partial 'TRACEID' + assert_output --partial 'CHANGES' +} + +## get object storages audit trail json output +@test 'get object storages history json output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb history objectStorages -o json + assert_success + assert_output --partial '"id"' + assert_output --partial '"objectStorageId"' + assert_output --partial '"action"' + assert_output --partial '"timestamp"' + assert_output --partial '"username"' + assert_output --partial '"changedBy"' + assert_output --partial '"requestId"' + assert_output --partial '"traceId"' + assert_output --partial '"changes"' +} + +## get object storages audit trail filter by object storage id +@test 'get object storages history filtered by object storage id: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + objectStorageId=$(getObjectStorageInRegion "EU") + + run ./cntb history objectStorages --objectStorageId "$objectStorageId" + assert_success + + # header + assert_output --partial 'ID' + assert_output --partial 'OBJECTSTORAGEID' + assert_output --partial 'ACTION' + assert_output --partial 'TIMESTAMP' + # content + assert_output --partial 'CREATED' +} + +## create bucket +@test "create bucket: ok" { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb create bucket EU "${TEST_BUCKET_NAME}" + assert_success +} + +## get buckets normal output +@test 'get buckets normal output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get buckets + assert_success + assert_output --partial 'NAME' +} + +## get buckets wide output +@test 'get buckets wide output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get buckets -o wide + assert_success + + assert_output --partial 'NAME' + assert_output --partial 'CREATIONDATE' +} + +## get buckets json output +@test 'get buckets json output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get buckets -o json + assert_success + + assert_output --partial '"creationDate"' + assert_output --partial '"name"' +} + +## get buckets yaml format +@test 'get buckets yaml output: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get buckets -o yaml + assert_success + + assert_output --partial 'creationDate:' + assert_output --partial 'name:' +} + +## get buckets in a specificed version +@test 'get buckets filtered by region: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get buckets -r EU + assert_success + assert_output --partial 'NAME' +} + +## create folder +@test 'create object: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb create object --region "EU" --bucket "${TEST_BUCKET_NAME}" --prefix '/test/folder' + assert_success +} + +## get folder +@test 'get object: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get object --region "EU" --bucket "${TEST_BUCKET_NAME}" --path '/test/folder' + assert_success +} + +## get all folder +@test 'get objects: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb get objects --region "EU" --bucket "${TEST_BUCKET_NAME}" + assert_success + assert_output --partial 'NAME' + assert_output --partial 'SIZE' + assert_output --partial 'LASTMODIFIED' +} + +## upload file to folder +@test 'upload file: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb create object --region "EU" --bucket "${TEST_BUCKET_NAME}" --prefix '/test/folder' --path "go.sum" + assert_success +} + +## delete file from folder +@test 'delete file: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb delete object --region "EU" --bucket "${TEST_BUCKET_NAME}" --path 'test/folder/go.sum' + assert_success +} + +## delete folder +@test 'delete object: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb delete object --region "EU" --bucket "${TEST_BUCKET_NAME}" --path 'test/folder' + assert_success +} + +## delete bucket +@test "delete bucket: ok" { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + run ./cntb delete bucket EU "${TEST_BUCKET_NAME}" + assert_success +} + +## resize object storage with lower limit +@test 'resize object storage where size limit is lower: nok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + objectStorageId=$(getObjectStorageInRegion "EU") + + run ./cntb resize objectStorage "${objectStorageId}" --totalPurchasedSpaceTB 1 --scalingLimitTB 1 --scalingState "enabled" + assert_failure + assert_output --partial 'Error while updating object storage: 400 - Bad Request totalPurchasedSpaceTB size limit should be bigger than the existing one.\n' +} + +## resize object storage +@test 'resize object storage: ok' { + if [ ${INT_ENVIRONMENT} == 'test' ]; then + skip "Skip: test env has no CMS backend" + fi + + objectStorageId=$(getObjectStorageInRegion "EU") + + run ./cntb resize objectStorage "${objectStorageId}" --totalPurchasedSpaceTB 3 --scalingLimitTB 3 + assert_success +} + +## Negative Tests + +@test "create object storage with non existing region: nok" { + run ./cntb create objectStorage --region "FOO" --totalPurchasedSpaceTB 1 --scalingState "disabled" + assert_failure +} + +@test "create object storage missing totalPurchasedSpace: nok" { + run ./cntb create objectStorage --productId 1 --region "EU" --scalingState "enabled" + assert_failure +} + +@test "create object storage missing scalingLimit when scalingState active: nok" { + run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" + assert_failure +} + +@test 'create bucket with invalid name: nok' { + run ./cntb create bucket EU 'T..${TEST_BUCKET_NAME}' + assert_failure + assert_output --partial 'Could not create bucket T..${TEST_BUCKET_NAME}. Name may contain unaccepted characters.' +} + +@test 'create bucket with invalid region: nok' { + run ./cntb create bucket DE 'T..${TEST_BUCKET_NAME}' + assert_failure + assert_output --partial 'No Object Storage could be found in this region.' +} + +@test 'create bucket with missing region: nok' { + run ./cntb create bucket 'T..${TEST_BUCKET_NAME}' + assert_failure + assert_output --partial 'Please provide a region and a bucketName' +} + +@test 'create object with missing arguments: nok' { + run ./cntb create object --bucket ${TEST_BUCKET_NAME} --prefix '/test/${TEST_BUCKET_NAME}' --path "go.sum" + assert_failure + assert_output --partial 'Argument region is empty.' + + run ./cntb create object --region "EU" --prefix '/test/${TEST_BUCKET_NAME}' --path "go.sum" + assert_failure + assert_output --partial 'Argument bucket is empty.' + + run ./cntb create object --region "EU" --bucket ${TEST_BUCKET_NAME} --path "go.sum" + assert_failure + assert_output --partial 'Argument prefix is empty.' +} + +@test 'delete object with missing arguments: nok' { + run ./cntb delete object --bucket ${TEST_BUCKET_NAME} --path '/test/${TEST_BUCKET_NAME}' + assert_failure + assert_output --partial 'Argument region is empty.' + + run ./cntb delete object --region "EU" --path '/test/${TEST_BUCKET_NAME}' + assert_failure + assert_output --partial 'Argument bucket is empty.' + + run ./cntb delete object --region "EU" --bucket ${TEST_BUCKET_NAME} + assert_failure + assert_output --partial 'Argument path is empty.' +} + +@test 'delete bucket which not exists: nok' { + run ./cntb delete bucket EU a19b8645-79d2-4fbb-ac56-a927d69b8d2b + assert_failure + assert_output --partial 'The specified bucket does not exist.' +} + +@test 'delete bucket with missing arguments: nok' { + run ./cntb delete bucket EU + assert_failure + assert_output --partial 'Please provide a region and a bucketName' + + run ./cntb delete bucket bucket123 + assert_failure + assert_output --partial 'Please provide a region and a bucketName' +} + +@test 'delete buckets with invalid region: nok' { + run ./cntb delete bucket USA "${TEST_BUCKET_NAME}" + assert_failure + assert_output --partial 'No Object Storage could be found in this region.' +} + +@test 'get buckets with invalid region: nok' { + run ./cntb get buckets -r EUO + assert_failure + assert_output --partial 'No Object Storage could be found in this region' +} + +@test 'get object with missing arguments: nok' { + run ./cntb get object --bucket ${TEST_BUCKET_NAME} --path ${TEST_BUCKET_NAME} + assert_failure + assert_output --partial 'Argument region is empty.' + + run ./cntb get object --region "EU" --path ${TEST_BUCKET_NAME} + assert_failure + assert_output --partial 'Argument bucket is empty.' + + run ./cntb get object --region "EU" --bucket ${TEST_BUCKET_NAME} + assert_failure + assert_output --partial 'Argument path is empty' +} + +@test 'get objects with missing arguments: nok' { + run ./cntb get objects --bucket ${TEST_BUCKET_NAME} + assert_failure + assert_output --partial 'Argument region is empty.' + + run ./cntb get objects --region "EU" + assert_failure + assert_output --partial 'Argument bucket is empty.' +} + +@test 'get object storage stats with no object storage id: nok' { + run ./cntb stats objectStorage + assert_failure +} + +@test 'get object storage stats with wrong object storage id: nok' { + run ./cntb stats objectStorage 3162351f-456b-423a-b127-ab77baaa4e48 + assert_failure +} + +@test 'get object storage with not an uuid object storage id: nok' { + run ./cntb get objectStorage 100 + assert_failure + assert_output --partial 'Error while retrieving object storage: 400 - [objectStorageId must be a UUID]' +} + +@test 'resize object storage that not exists: nok' { + run ./cntb resize objectStorage "23729f17-85d3-4f0c-b4b8-b8b90225d167" --totalPurchasedSpaceTB 40 + assert_failure + assert_output --partial 'Error while updating object storage: 404 - Entry ObjectStorage not found by objectStorageId' +} \ No newline at end of file diff --git a/bats/resize_object_storage.bats b/bats/resize_object_storage.bats deleted file mode 100644 index 5055be8..0000000 --- a/bats/resize_object_storage.bats +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env bats - -load handling_conf_files.bash -load globals.bash -load cleanup-object-storage.bash -load_lib bats-support -load_lib bats-assert - -function setup_file() { - store_config_files - ensureTestConfig -} - -function teardown_file() { - restore_config_files - - deleteObjectStorageIfExisting "EU" -} - -@test 'resize object storage: ok' { - deleteObjectStorageIfExisting "EU" - - run ./cntb create objectStorage --region "EU" --totalPurchasedSpaceTB 1 --scalingState "enabled" --scalingLimitTB 1 - assert_success - objectStorageId="$output" - - sleep 10 # waiting for the subscription to be published and subscribed - - run ./cntb resize objectStorage "${objectStorageId}" --totalPurchasedSpaceTB 2 - assert_success - - run ./cntb resize objectStorage "${objectStorageId}" --scalingLimitTB 2 - assert_success - - run ./cntb resize objectStorage "${objectStorageId}" --totalPurchasedSpaceTB 3 --scalingLimitTB 3 - assert_success -} - -@test 'resize object storage - only auto scaling: ok' { - objectStorageId=$(getObjectStorageInRegion 'EU') - - run ./cntb resize objectStorage "${objectStorageId}" --scalingLimitTB 2 - assert_success - - run ./cntb resize objectStorage "${objectStorageId}" --scalingState "disabled" - assert_success -} - -@test 'resize object storage with invalid auto scaling: nok' { - objectStorageId=$(getObjectStorageInRegion 'EU') - - run ./cntb resize objectStorage "${objectStorageId}" --totalPurchasedSpaceTB 1 --scalingLimitTB 1 --scalingState "enabled" - assert_failure - assert_output --partial 'Error while updating object storage: 400 - Bad Request totalPurchasedSpaceTB size limit should be bigger than the existing one.\n' -} - -@test 'resize object storage: nok : non existing object storage' { - run ./cntb resize objectStorage "23729f17-85d3-4f0c-b4b8-b8b90225d167" --totalPurchasedSpaceTB 40 - assert_failure - assert_output --partial 'Error while updating object storage: 404 - Entry ObjectStorage not found by objectStorageId' -} diff --git a/cmd/config.go b/cmd/config.go index 2d1f770..aeae67f 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -55,7 +55,7 @@ func SaveConfigFile(config *config.Configuration) { if err != nil { log.Fatal(fmt.Sprintf("Could handle new values as they lead to errors %v", err)) } - err = os.WriteFile(cfgFile, newYamlFile, 0644) + err = os.WriteFile(cfgFile, newYamlFile, 0600) if err != nil { log.Fatal(fmt.Sprintf("Could not store to %v due to %v", cfgFile, err)) } diff --git a/cmd/objects/create.go b/cmd/objects/create.go index a10190b..a7e855d 100644 --- a/cmd/objects/create.go +++ b/cmd/objects/create.go @@ -3,13 +3,13 @@ package cmd import ( "context" "fmt" + "net/url" "os" "path/filepath" - - //"path" + "strings" + "time" s "strings" - "time" "contabo.com/cli/cntb/client" contaboCmd "contabo.com/cli/cntb/cmd" @@ -21,8 +21,6 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" - "net/url" - "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) @@ -36,6 +34,8 @@ func PutObject(localPath string, isDir bool, s3Prefix string, s3Client *minio.Cl relativePath = filepath.ToSlash(relativePath) // converts seperator according os setting to slash s3Path := filepath.Join(s3Prefix, relativePath) + s3Path = strings.Replace(s3Path, "\\", "/", -1) + // remove / at the beginning to avoid multiple / in the request url if s.HasPrefix(s3Path, "/") { s3Path = s3Path[1:] @@ -57,7 +57,6 @@ func PutObject(localPath string, isDir bool, s3Prefix string, s3Client *minio.Cl _, err = s3Client.PutObject(context.Background(), createObjectBucketName, s3Path, object, objectStat.Size(), minio.PutObjectOptions{ContentType: "application/octet-stream"}) if err != nil { - if s.Contains(err.Error(), "API rate limit exceeded") { // retry in case of rate limit exceeded eror time.Sleep(1000 * time.Millisecond) _, err = s3Client.PutObject(context.Background(), createObjectBucketName, s3Path, object, objectStat.Size(), minio.PutObjectOptions{ContentType: "application/octet-stream"}) @@ -68,7 +67,6 @@ func PutObject(localPath string, isDir bool, s3Prefix string, s3Client *minio.Cl log.Fatal(fmt.Sprintf("Could not create object file %v. Got error %v", s3Path, err)) return } - } fmt.Printf("uploaded file : %s\n", s3Path) @@ -83,7 +81,6 @@ func PutObject(localPath string, isDir bool, s3Prefix string, s3Client *minio.Cl } _, err := s3Client.PutObject(context.Background(), createObjectBucketName, s3Path, nil, 0, minio.PutObjectOptions{}) - if err != nil { if s.Contains(err.Error(), "API rate limit exceeded") { // retry in case of rate limit exceeded eror time.Sleep(1000 * time.Millisecond) @@ -98,7 +95,6 @@ func PutObject(localPath string, isDir bool, s3Prefix string, s3Client *minio.Cl } fmt.Printf("uploaded folder : %s\n", s3Path) } - } var objectCreateCmd = &cobra.Command{ @@ -107,7 +103,6 @@ var objectCreateCmd = &cobra.Command{ Long: `Creates a S3 object in the given bucket.`, Example: `cntb create object --region EU --bucket bucket123 --prefix prefix1/ --path path1 `, Run: func(cmd *cobra.Command, args []string) { - // get list of object storage ApiRetrieveObjectStorageListRequest := client.ApiClient(). ObjectStoragesApi.RetrieveObjectStorageList(context.Background()). @@ -186,7 +181,6 @@ var objectCreateCmd = &cobra.Command{ } else { // if user wants to create folder (prefix) on s3 PutObject("", true, createObjectPrefix, s3Client) } - }, Args: func(cmd *cobra.Command, args []string) error { contaboCmd.ValidateCreateInput() @@ -236,5 +230,4 @@ func init() { objectCreateCmd.Flags().StringVarP(&createObjectBucketName, "bucket", "b", "", `Bucket where the object will be created.`) objectCreateCmd.Flags().StringVar(&createObjectPrefix, "prefix", "", `Prefix to be added to the stored object.`) objectCreateCmd.Flags().StringVar(&createObjectPath, "path", "", `file or folder where the object will be stored.`) - } diff --git a/cmd/objects/delete.go b/cmd/objects/delete.go index abf9f89..0951e1f 100644 --- a/cmd/objects/delete.go +++ b/cmd/objects/delete.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/url" + "strings" s "strings" "contabo.com/cli/cntb/client" @@ -25,13 +26,14 @@ func DeleteObject(bucketName string, s3Path string, s3Client *minio.Client) { GovernanceBypass: true, } + s3Path = strings.Replace(s3Path, "\\", "/", -1) + // Remove / from begining of the path if s.HasPrefix(s3Path, "/") { s3Path = s3Path[1:] } err := s3Client.RemoveObject(context.Background(), bucketName, s3Path, opts) - if err != nil { log.Fatal("Error in deleting object %v . Error is : %v", s3Path, err.Error()) return @@ -110,7 +112,6 @@ var objectDeleteCmd = &cobra.Command{ } fmt.Printf("Number of deleted objects is %v \n", counter) - }, Args: func(cmd *cobra.Command, args []string) error { contaboCmd.ValidateCreateInput() @@ -157,5 +158,4 @@ func init() { objectDeleteCmd.Flags().StringVarP(&deleteObjectRegion, "region", "r", "", `Region where the objectStorage is located.`) objectDeleteCmd.Flags().StringVarP(&deleteObjectBucketName, "bucket", "b", "", `Bucket where the object will be deleted from.`) objectDeleteCmd.Flags().StringVarP(&deleteObjectPath, "path", "p", "", `Path where the object will be deleted from.`) - }