Skip to content

Commit 5136615

Browse files
test: move object-storage tests to suites, use setup.bats conventions
1 parent 1b67460 commit 5136615

13 files changed

Lines changed: 298 additions & 328 deletions
Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
#!/usr/bin/env bats
22

3-
# tags: object-storage
3+
# paths: commands/object-storage/*
44

5-
BATS_LIBS_PATH="${LIBS_PATH:-../libs}" # fallback to relative path if not set
6-
load "${BATS_LIBS_PATH}/bats-assert/load"
7-
load "${BATS_LIBS_PATH}/bats-support/load"
85
load '../setup.bats'
96

107

@@ -35,45 +32,45 @@ teardown_file() {
3532
# --- validation ---
3633

3734
@test "object-storage bucket cors get: missing --name flag returns error" {
38-
run ionosctl object-storage bucket cors get 2>&1
35+
run ionosctl object-storage bucket cors get
3936
assert_failure
40-
assert_output -p "requires at least 1 option"
37+
assert_stderr -p "requires at least 1 option"
4138
}
4239

4340
@test "object-storage bucket cors put: missing --name flag returns error" {
44-
run ionosctl object-storage bucket cors put 2>&1
41+
run ionosctl object-storage bucket cors put
4542
assert_failure
4643
}
4744

4845
@test "object-storage bucket cors put: missing --json-properties returns error" {
49-
run ionosctl object-storage bucket cors put --name some-bucket 2>&1
46+
run ionosctl object-storage bucket cors put --name some-bucket
5047
assert_failure
51-
assert_output -p "requires at least 2 options"
48+
assert_stderr -p "requires at least 2 options"
5249
}
5350

5451
@test "object-storage bucket cors delete: missing --name flag returns error" {
55-
run ionosctl object-storage bucket cors delete 2>&1
52+
run ionosctl object-storage bucket cors delete
5653
assert_failure
57-
assert_output -p "requires at least 1 option"
54+
assert_stderr -p "requires at least 1 option"
5855
}
5956

6057
@test "object-storage bucket cors get: missing S3 credentials returns error" {
6158
run env -u IONOS_S3_ACCESS_KEY -u IONOS_S3_SECRET_KEY \
62-
ionosctl object-storage bucket cors get --name some-bucket 2>&1
59+
ionosctl object-storage bucket cors get --name some-bucket
6360
assert_failure
64-
assert_output -p "object storage credentials not found"
61+
assert_stderr -p "object storage credentials not found"
6562
}
6663

6764
@test "object-storage bucket cors put: --json-properties-example prints example JSON" {
68-
run ionosctl object-storage bucket cors put --json-properties-example 2>/dev/null
65+
run ionosctl object-storage bucket cors put --json-properties-example
6966
assert_success
7067
assert_output -p "CORSRules"
7168
assert_output -p "AllowedOrigins"
7269
assert_output -p "AllowedMethods"
7370
}
7471

7572
@test "object-storage bucket cors put: nonexistent file returns error" {
76-
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "/tmp/nonexistent-cors-file.json" 2>&1
73+
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "/tmp/nonexistent-cors-file.json"
7774
assert_failure
7875
}
7976

@@ -84,27 +81,27 @@ teardown_file() {
8481
cat > "$tmpfile" <<EOF
8582
{"CORSRules":[{"AllowedOrigins":["http://www.example.com"],"AllowedMethods":["GET","PUT","POST"],"AllowedHeaders":["*"],"ExposeHeaders":["x-amz-request-id"],"MaxAgeSeconds":3600}]}
8683
EOF
87-
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile" 2>/dev/null
84+
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile"
8885
rm -f "$tmpfile"
8986
assert_success
9087
assert_output -p "applied successfully"
9188
}
9289

9390
@test "object-storage bucket cors get: retrieve CORS configuration" {
94-
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME" 2>/dev/null
91+
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME"
9592
assert_success
9693
assert_output -p "http://www.example.com"
9794
assert_output -p "GET"
9895
}
9996

10097
@test "object-storage bucket cors delete: remove CORS configuration" {
101-
run ionosctl object-storage bucket cors delete --name "$TEST_BUCKET_NAME" -f 2>/dev/null
98+
run ionosctl object-storage bucket cors delete --name "$TEST_BUCKET_NAME" -f
10299
assert_success
103100
assert_output -p "deleted successfully"
104101
}
105102

106103
@test "object-storage bucket cors get: after delete returns error" {
107-
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME" 2>&1
104+
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME"
108105
assert_failure
109106
}
110107

@@ -115,21 +112,21 @@ EOF
115112
cat > "$tmpfile" <<EOF
116113
{"CORSRules":[{"AllowedOrigins":["http://example.com"],"AllowedMethods":["GET"],"AllowedHeaders":["Authorization"]},{"AllowedOrigins":["http://other.com"],"AllowedMethods":["POST","DELETE"],"AllowedHeaders":["*"],"MaxAgeSeconds":600}]}
117114
EOF
118-
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile" 2>/dev/null
115+
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile"
119116
rm -f "$tmpfile"
120117
assert_success
121118
assert_output -p "applied successfully"
122119
}
123120

124121
@test "object-storage bucket cors get: multiple rules display" {
125-
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME" 2>/dev/null
122+
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME"
126123
assert_success
127124
assert_output -p "http://example.com"
128125
assert_output -p "http://other.com"
129126
}
130127

131128
@test "object-storage bucket cors delete: cleanup multiple rules" {
132-
run ionosctl object-storage bucket cors delete --name "$TEST_BUCKET_NAME" -f 2>/dev/null
129+
run ionosctl object-storage bucket cors delete --name "$TEST_BUCKET_NAME" -f
133130
assert_success
134131
}
135132

@@ -151,20 +148,20 @@ EOF
151148
]
152149
}
153150
CORS
154-
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile" 2>/dev/null
151+
run ionosctl object-storage bucket cors put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile"
155152
rm -f "$tmpfile"
156153
assert_success
157154
assert_output -p "applied successfully"
158155
}
159156

160157
@test "object-storage bucket cors get: file-based config applied correctly" {
161-
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME" 2>/dev/null
158+
run ionosctl object-storage bucket cors get --name "$TEST_BUCKET_NAME"
162159
assert_success
163160
assert_output -p "https://app.example.com"
164161
assert_output -p "Content-Type"
165162
}
166163

167164
@test "object-storage bucket cors delete: cleanup file-based config" {
168-
run ionosctl object-storage bucket cors delete --name "$TEST_BUCKET_NAME" -f 2>/dev/null
165+
run ionosctl object-storage bucket cors delete --name "$TEST_BUCKET_NAME" -f
169166
assert_success
170167
}

test/bats/object-storage/encryption.bats renamed to test/suites/object-storage/encryption.bats

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
#!/usr/bin/env bats
22

3-
# tags: object-storage
3+
# paths: commands/object-storage/*
44

5-
BATS_LIBS_PATH="${LIBS_PATH:-../libs}" # fallback to relative path if not set
6-
load "${BATS_LIBS_PATH}/bats-assert/load"
7-
load "${BATS_LIBS_PATH}/bats-support/load"
85
load '../setup.bats'
96

107

@@ -35,45 +32,45 @@ teardown_file() {
3532
# --- validation ---
3633

3734
@test "object-storage bucket encryption get: missing --name flag returns error" {
38-
run ionosctl object-storage bucket encryption get 2>&1
35+
run ionosctl object-storage bucket encryption get
3936
assert_failure
40-
assert_output -p "requires at least 1 option"
37+
assert_stderr -p "requires at least 1 option"
4138
}
4239

4340
@test "object-storage bucket encryption put: missing --name flag returns error" {
44-
run ionosctl object-storage bucket encryption put 2>&1
41+
run ionosctl object-storage bucket encryption put
4542
assert_failure
4643
}
4744

4845
@test "object-storage bucket encryption put: missing --json-properties returns error" {
49-
run ionosctl object-storage bucket encryption put --name some-bucket 2>&1
46+
run ionosctl object-storage bucket encryption put --name some-bucket
5047
assert_failure
51-
assert_output -p "requires at least 2 options"
48+
assert_stderr -p "requires at least 2 options"
5249
}
5350

5451
@test "object-storage bucket encryption delete: missing --name flag returns error" {
55-
run ionosctl object-storage bucket encryption delete 2>&1
52+
run ionosctl object-storage bucket encryption delete
5653
assert_failure
57-
assert_output -p "requires at least 1 option"
54+
assert_stderr -p "requires at least 1 option"
5855
}
5956

6057
@test "object-storage bucket encryption get: missing S3 credentials returns error" {
6158
run env -u IONOS_S3_ACCESS_KEY -u IONOS_S3_SECRET_KEY \
62-
ionosctl object-storage bucket encryption get --name some-bucket 2>&1
59+
ionosctl object-storage bucket encryption get --name some-bucket
6360
assert_failure
64-
assert_output -p "object storage credentials not found"
61+
assert_stderr -p "object storage credentials not found"
6562
}
6663

6764
@test "object-storage bucket encryption put: --json-properties-example prints example JSON" {
68-
run ionosctl object-storage bucket encryption put --json-properties-example 2>/dev/null
65+
run ionosctl object-storage bucket encryption put --json-properties-example
6966
assert_success
7067
assert_output -p "Rules"
7168
assert_output -p "SSEAlgorithm"
7269
assert_output -p "AES256"
7370
}
7471

7572
@test "object-storage bucket encryption put: nonexistent file returns error" {
76-
run ionosctl object-storage bucket encryption put --name "$TEST_BUCKET_NAME" --json-properties "/tmp/nonexistent-encryption-file.json" 2>&1
73+
run ionosctl object-storage bucket encryption put --name "$TEST_BUCKET_NAME" --json-properties "/tmp/nonexistent-encryption-file.json"
7774
assert_failure
7875
}
7976

@@ -84,26 +81,26 @@ teardown_file() {
8481
cat > "$tmpfile" <<EOF
8582
{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}
8683
EOF
87-
run ionosctl object-storage bucket encryption put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile" 2>/dev/null
84+
run ionosctl object-storage bucket encryption put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile"
8885
rm -f "$tmpfile"
8986
assert_success
9087
assert_output -p "applied successfully"
9188
}
9289

9390
@test "object-storage bucket encryption get: retrieve encryption configuration" {
94-
run ionosctl object-storage bucket encryption get --name "$TEST_BUCKET_NAME" 2>/dev/null
91+
run ionosctl object-storage bucket encryption get --name "$TEST_BUCKET_NAME"
9592
assert_success
9693
assert_output -p "AES256"
9794
}
9895

9996
@test "object-storage bucket encryption delete: remove encryption configuration" {
100-
run ionosctl object-storage bucket encryption delete --name "$TEST_BUCKET_NAME" -f 2>/dev/null
97+
run ionosctl object-storage bucket encryption delete --name "$TEST_BUCKET_NAME" -f
10198
assert_success
10299
assert_output -p "deleted successfully"
103100
}
104101

105102
@test "object-storage bucket encryption get: after delete returns error" {
106-
run ionosctl object-storage bucket encryption get --name "$TEST_BUCKET_NAME" 2>&1
103+
run ionosctl object-storage bucket encryption get --name "$TEST_BUCKET_NAME"
107104
assert_failure
108105
}
109106

@@ -123,19 +120,19 @@ EOF
123120
]
124121
}
125122
ENC
126-
run ionosctl object-storage bucket encryption put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile" 2>/dev/null
123+
run ionosctl object-storage bucket encryption put --name "$TEST_BUCKET_NAME" --json-properties "$tmpfile"
127124
rm -f "$tmpfile"
128125
assert_success
129126
assert_output -p "applied successfully"
130127
}
131128

132129
@test "object-storage bucket encryption get: file-based config applied correctly" {
133-
run ionosctl object-storage bucket encryption get --name "$TEST_BUCKET_NAME" 2>/dev/null
130+
run ionosctl object-storage bucket encryption get --name "$TEST_BUCKET_NAME"
134131
assert_success
135132
assert_output -p "AES256"
136133
}
137134

138135
@test "object-storage bucket encryption delete: cleanup file-based config" {
139-
run ionosctl object-storage bucket encryption delete --name "$TEST_BUCKET_NAME" -f 2>/dev/null
136+
run ionosctl object-storage bucket encryption delete --name "$TEST_BUCKET_NAME" -f
140137
assert_success
141138
}
Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
#!/usr/bin/env bats
22

3-
# tags: object-storage
3+
# paths: commands/object-storage/*
44

5-
BATS_LIBS_PATH="${LIBS_PATH:-../libs}" # fallback to relative path if not set
6-
load "${BATS_LIBS_PATH}/bats-assert/load"
7-
load "${BATS_LIBS_PATH}/bats-support/load"
85
load '../setup.bats'
96

107

@@ -24,7 +21,7 @@ setup_file() {
2421
run ionosctl object-storage bucket create --name "$TEST_BUCKET_NAME" --location "$TEST_REGION" --object-lock
2522
assert_success
2623

27-
run ionosctl object-storage object put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --source "$TEST_FILE" 2>/dev/null
24+
run ionosctl object-storage object put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --source "$TEST_FILE"
2825
assert_success
2926

3027
echo "created test bucket with object-lock for legal-hold tests: $TEST_BUCKET_NAME"
@@ -34,7 +31,7 @@ teardown_file() {
3431
rm -f "$TEST_FILE"
3532
if [[ -n "$TEST_BUCKET_NAME" ]]; then
3633
# SAFETY: Always remove legal hold before deleting
37-
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --status OFF 2>/dev/null
34+
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --status OFF
3835
run ionosctl object-storage object delete --name "$TEST_BUCKET_NAME" --all -f
3936
run ionosctl object-storage bucket delete --name "$TEST_BUCKET_NAME" -f
4037
fi
@@ -43,61 +40,61 @@ teardown_file() {
4340
# --- legal-hold get: validation ---
4441

4542
@test "object-storage object legal-hold get: missing --name flag returns error" {
46-
run ionosctl object-storage object legal-hold get --key foo 2>&1
43+
run ionosctl object-storage object legal-hold get --key foo
4744
assert_failure
48-
assert_output -p "requires at least"
45+
assert_stderr -p "requires at least"
4946
}
5047

5148
@test "object-storage object legal-hold get: missing --key flag returns error" {
52-
run ionosctl object-storage object legal-hold get --name "$TEST_BUCKET_NAME" 2>&1
49+
run ionosctl object-storage object legal-hold get --name "$TEST_BUCKET_NAME"
5350
assert_failure
54-
assert_output -p "requires at least"
51+
assert_stderr -p "requires at least"
5552
}
5653

5754
# --- legal-hold put: validation ---
5855

5956
@test "object-storage object legal-hold put: missing --name flag returns error" {
60-
run ionosctl object-storage object legal-hold put --key foo --status ON 2>&1
57+
run ionosctl object-storage object legal-hold put --key foo --status ON
6158
assert_failure
62-
assert_output -p "requires at least"
59+
assert_stderr -p "requires at least"
6360
}
6461

6562
@test "object-storage object legal-hold put: missing --key flag returns error" {
66-
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --status ON 2>&1
63+
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --status ON
6764
assert_failure
68-
assert_output -p "requires at least"
65+
assert_stderr -p "requires at least"
6966
}
7067

7168
@test "object-storage object legal-hold put: missing --status flag returns error" {
72-
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" 2>&1
69+
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY"
7370
assert_failure
74-
assert_output -p "requires at least"
71+
assert_stderr -p "requires at least"
7572
}
7673

7774
# --- legal-hold put/get: lifecycle ---
7875

7976
# SAFETY: Legal hold ON is applied and then immediately set to OFF in subsequent tests.
8077
# Teardown also ensures legal hold is always removed before cleanup.
8178
@test "object-storage object legal-hold put: set status ON" {
82-
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --status ON 2>/dev/null
79+
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --status ON
8380
assert_success
8481
assert_output -p "applied successfully"
8582
}
8683

8784
@test "object-storage object legal-hold get: verify status is ON" {
88-
run ionosctl object-storage object legal-hold get --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" 2>/dev/null
85+
run ionosctl object-storage object legal-hold get --name "$TEST_BUCKET_NAME" --key "$TEST_KEY"
8986
assert_success
9087
assert_output -p "ON"
9188
}
9289

9390
@test "object-storage object legal-hold put: set status OFF" {
94-
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --status OFF 2>/dev/null
91+
run ionosctl object-storage object legal-hold put --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" --status OFF
9592
assert_success
9693
assert_output -p "applied successfully"
9794
}
9895

9996
@test "object-storage object legal-hold get: verify status is OFF" {
100-
run ionosctl object-storage object legal-hold get --name "$TEST_BUCKET_NAME" --key "$TEST_KEY" 2>/dev/null
97+
run ionosctl object-storage object legal-hold get --name "$TEST_BUCKET_NAME" --key "$TEST_KEY"
10198
assert_success
10299
assert_output -p "OFF"
103100
}

0 commit comments

Comments
 (0)