Skip to content

Commit 6ae62bc

Browse files
yangzong18huiguangjun
authored andcommitted
change the name and type of LifecycleRuleFilter.not
1 parent 2fb94b2 commit 6ae62bc

File tree

3 files changed

+153
-9
lines changed

3 files changed

+153
-9
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ jobs:
1010
operating-system: [ubuntu-latest, windows-latest, macos-latest]
1111
php-version: ['7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
1212
steps:
13+
- name: Install SASL library on macOS
14+
if: matrix.operating-system == 'macos-latest' && matrix.php-version >= 8.5
15+
run: brew update && brew install cyrus-sasl
16+
1317
- name: Setup PHP, with composer and extensions
1418
uses: shivammathur/setup-php@v2
1519
with:

src/Models/LifecycleRuleFilter.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ final class LifecycleRuleFilter extends Model
1717
{
1818
/**
1919
* The condition that is matched by objects to which the lifecycle rule does not apply.
20-
* @var LifecycleRuleNot|null
20+
* @var array<LifecycleRuleNot>|null
2121
*/
2222
#[XmlElement(rename: 'Not', type: LifecycleRuleNot::class)]
23-
public ?LifecycleRuleNot $not;
23+
public ?array $nots;
2424

2525
/**
2626
* This lifecycle rule only applies to files larger than this size.
@@ -39,17 +39,17 @@ final class LifecycleRuleFilter extends Model
3939

4040
/**
4141
* LifecycleRuleFilter constructor.
42-
* @param LifecycleRuleNot|null $not The condition that is matched by objects to which the lifecycle rule does not apply.
42+
* @param array<LifecycleRuleNot>|null $nots The condition that is matched by objects to which the lifecycle rule does not apply.
4343
* @param int|null $objectSizeGreaterThan This lifecycle rule only applies to files larger than this size.
4444
* @param int|null $objectSizeLessThan This lifecycle rule only applies to files smaller than this size.
4545
*/
4646
public function __construct(
47-
?LifecycleRuleNot $not = null,
48-
?int $objectSizeGreaterThan = null,
49-
?int $objectSizeLessThan = null
47+
?array $nots = null,
48+
?int $objectSizeGreaterThan = null,
49+
?int $objectSizeLessThan = null
5050
)
5151
{
52-
$this->not = $not;
52+
$this->nots = $nots;
5353
$this->objectSizeGreaterThan = $objectSizeGreaterThan;
5454
$this->objectSizeLessThan = $objectSizeLessThan;
5555
}

tests/UnitTests/Transform/BucketLifecycleTest.php

Lines changed: 142 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ public function testFromPutBucketLifecycle()
9898
$request = new Models\PutBucketLifecycleRequest('bucket-123');
9999
$rule = new Models\LifecycleRule(prefix: '', transitions: array(
100100
new Models\LifecycleRuleTransition(days: 30, storageClass: 'Archive'),
101-
), filter: new Models\LifecycleRuleFilter(not: new Models\LifecycleRuleNot(tag: new Models\Tag(key: 'key1', value: 'value1'), prefix: 'log')
102-
), id: 'rule', expiration: new Models\LifecycleRuleExpiration(expiredObjectDeleteMarker: true), noncurrentVersionExpiration: new Models\NoncurrentVersionExpiration(noncurrentDays: 5), status: 'Enabled');
101+
), filter: new Models\LifecycleRuleFilter(nots: array(new Models\LifecycleRuleNot(tag: new Models\Tag(key: 'key1', value: 'value1'), prefix: 'log')
102+
)), id: 'rule', expiration: new Models\LifecycleRuleExpiration(expiredObjectDeleteMarker: true), noncurrentVersionExpiration: new Models\NoncurrentVersionExpiration(noncurrentDays: 5), status: 'Enabled');
103103
$request->lifecycleConfiguration = new Models\LifecycleConfiguration(
104104
array(
105105
$rule
@@ -112,6 +112,34 @@ public function testFromPutBucketLifecycle()
112112
BBB;
113113
$this->assertEquals($xml, $this->cleanXml($input->getBody()->getContents()));
114114

115+
$request = new Models\PutBucketLifecycleRequest('bucket-123');
116+
$rule = new Models\LifecycleRule(
117+
prefix: '',
118+
transitions: array(
119+
new Models\LifecycleRuleTransition(days: 30, storageClass: 'Archive'),
120+
),
121+
filter: new Models\LifecycleRuleFilter(
122+
nots: array(
123+
new Models\LifecycleRuleNot(tag: new Models\Tag(key: 'key1', value: 'value1'), prefix: 'log'),
124+
new Models\LifecycleRuleNot(tag: new Models\Tag(key: 'key2', value: 'value2'), prefix: 'pre')
125+
)),
126+
id: 'rule',
127+
expiration: new Models\LifecycleRuleExpiration(expiredObjectDeleteMarker: true),
128+
noncurrentVersionExpiration: new Models\NoncurrentVersionExpiration(noncurrentDays: 5),
129+
status: 'Enabled'
130+
);
131+
$request->lifecycleConfiguration = new Models\LifecycleConfiguration(
132+
array(
133+
$rule
134+
)
135+
);
136+
$input = BucketLifecycle::fromPutBucketLifecycle($request);
137+
$this->assertEquals('bucket-123', $input->getBucket());
138+
$xml = <<<BBB
139+
<?xml version="1.0" encoding="UTF-8"?><LifecycleConfiguration><Rule><Prefix></Prefix><Transition><Days>30</Days><StorageClass>Archive</StorageClass></Transition><Filter><Not><Tag><Key>key1</Key><Value>value1</Value></Tag><Prefix>log</Prefix></Not><Not><Tag><Key>key2</Key><Value>value2</Value></Tag><Prefix>pre</Prefix></Not></Filter><ID>rule</ID><Expiration><ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker></Expiration><NoncurrentVersionExpiration><NoncurrentDays>5</NoncurrentDays></NoncurrentVersionExpiration><Status>Enabled</Status></Rule></LifecycleConfiguration>
140+
BBB;
141+
$this->assertEquals($xml, $this->cleanXml($input->getBody()->getContents()));
142+
115143
// demo6
116144
$request = new Models\PutBucketLifecycleRequest('bucket-123');
117145
$rule = new Models\LifecycleRule(prefix: '', transitions: array(
@@ -349,6 +377,118 @@ public function testToGetBucketLifecycle()
349377
$this->assertFalse($result->lifecycleConfiguration->rules[1]->noncurrentVersionTransitions[0]->returnToStdWhenVisit);
350378
$this->assertTrue($result->lifecycleConfiguration->rules[1]->noncurrentVersionTransitions[0]->isAccessTime);
351379
$this->assertEquals(1631698332, $result->lifecycleConfiguration->rules[1]->atimeBase);
380+
381+
$body = '<?xml version="1.0" encoding="UTF-8"?>
382+
<LifecycleConfiguration>
383+
<Rule>
384+
<Prefix></Prefix>
385+
<Transition>
386+
<Days>30</Days>
387+
<StorageClass>Archive</StorageClass>
388+
</Transition>
389+
<Filter>
390+
<Not>
391+
<Tag>
392+
<Key>key1</Key>
393+
<Value>value1</Value>
394+
</Tag>
395+
<Prefix>log</Prefix>
396+
</Not>
397+
</Filter>
398+
<ID>rule</ID>
399+
<Expiration>
400+
<ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>
401+
</Expiration>
402+
<NoncurrentVersionExpiration>
403+
<NoncurrentDays>5</NoncurrentDays>
404+
</NoncurrentVersionExpiration>
405+
<Status>Enabled</Status>
406+
</Rule>
407+
</LifecycleConfiguration>';
408+
$output = new OperationOutput(
409+
'OK',
410+
200,
411+
['x-oss-request-id' => '123'],
412+
Utils::streamFor($body)
413+
);
414+
$result = BucketLifecycle::toGetBucketLifecycle($output);
415+
$this->assertEquals('OK', $result->status);
416+
$this->assertEquals(200, $result->statusCode);
417+
$this->assertEquals('123', $result->requestId);
418+
$this->assertEquals(1, count($result->headers));
419+
$this->assertEquals('123', $result->headers['x-oss-request-id']);
420+
$this->assertEquals(1, count($result->lifecycleConfiguration->rules));
421+
$this->assertEquals('rule', $result->lifecycleConfiguration->rules[0]->id);
422+
$this->assertEquals('', $result->lifecycleConfiguration->rules[0]->prefix);
423+
$this->assertEquals('Enabled', $result->lifecycleConfiguration->rules[0]->status);
424+
$this->assertEquals(1, count($result->lifecycleConfiguration->rules[0]->transitions));
425+
$this->assertEquals(30, $result->lifecycleConfiguration->rules[0]->transitions[0]->days);
426+
$this->assertEquals('Archive', $result->lifecycleConfiguration->rules[0]->transitions[0]->storageClass);
427+
$this->assertEquals(1, count($result->lifecycleConfiguration->rules[0]->filter->nots));
428+
$this->assertEquals('log', $result->lifecycleConfiguration->rules[0]->filter->nots[0]->prefix);
429+
$this->assertEquals('key1', $result->lifecycleConfiguration->rules[0]->filter->nots[0]->tag->key);
430+
$this->assertEquals('value1', $result->lifecycleConfiguration->rules[0]->filter->nots[0]->tag->value);
431+
432+
$body = '<?xml version="1.0" encoding="UTF-8"?>
433+
<LifecycleConfiguration>
434+
<Rule>
435+
<Prefix></Prefix>
436+
<Transition>
437+
<Days>30</Days>
438+
<StorageClass>Archive</StorageClass>
439+
</Transition>
440+
<Filter>
441+
<Not>
442+
<Tag>
443+
<Key>key1</Key>
444+
<Value>value1</Value>
445+
</Tag>
446+
<Prefix>log</Prefix>
447+
</Not>
448+
<Not>
449+
<Tag>
450+
<Key>key2</Key>
451+
<Value>value2</Value>
452+
</Tag>
453+
<Prefix>pre</Prefix>
454+
</Not>
455+
</Filter>
456+
<ID>rule</ID>
457+
<Expiration>
458+
<ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>
459+
</Expiration>
460+
<NoncurrentVersionExpiration>
461+
<NoncurrentDays>5</NoncurrentDays>
462+
</NoncurrentVersionExpiration>
463+
<Status>Enabled</Status>
464+
</Rule>
465+
</LifecycleConfiguration>';
466+
$output = new OperationOutput(
467+
'OK',
468+
200,
469+
['x-oss-request-id' => '123'],
470+
Utils::streamFor($body)
471+
);
472+
$result = BucketLifecycle::toGetBucketLifecycle($output);
473+
$this->assertEquals('OK', $result->status);
474+
$this->assertEquals(200, $result->statusCode);
475+
$this->assertEquals('123', $result->requestId);
476+
$this->assertEquals(1, count($result->headers));
477+
$this->assertEquals('123', $result->headers['x-oss-request-id']);
478+
$this->assertEquals(1, count($result->lifecycleConfiguration->rules));
479+
$this->assertEquals('rule', $result->lifecycleConfiguration->rules[0]->id);
480+
$this->assertEquals('', $result->lifecycleConfiguration->rules[0]->prefix);
481+
$this->assertEquals('Enabled', $result->lifecycleConfiguration->rules[0]->status);
482+
$this->assertEquals(1, count($result->lifecycleConfiguration->rules[0]->transitions));
483+
$this->assertEquals(30, $result->lifecycleConfiguration->rules[0]->transitions[0]->days);
484+
$this->assertEquals('Archive', $result->lifecycleConfiguration->rules[0]->transitions[0]->storageClass);
485+
$this->assertEquals(2, count($result->lifecycleConfiguration->rules[0]->filter->nots));
486+
$this->assertEquals('log', $result->lifecycleConfiguration->rules[0]->filter->nots[0]->prefix);
487+
$this->assertEquals('key1', $result->lifecycleConfiguration->rules[0]->filter->nots[0]->tag->key);
488+
$this->assertEquals('value1', $result->lifecycleConfiguration->rules[0]->filter->nots[0]->tag->value);
489+
$this->assertEquals('pre', $result->lifecycleConfiguration->rules[0]->filter->nots[1]->prefix);
490+
$this->assertEquals('key2', $result->lifecycleConfiguration->rules[0]->filter->nots[1]->tag->key);
491+
$this->assertEquals('value2', $result->lifecycleConfiguration->rules[0]->filter->nots[1]->tag->value);
352492
}
353493

354494
public function testFromDeleteBucketLifecycle()

0 commit comments

Comments
 (0)