Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions extensions/lifecycle/util/RulesReducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,7 @@ class RulesReducer {
let storageClass;

if (r.Expiration) {
// NOTE: Expiration Days cannot be 0.
if (r.Expiration.Days) {
if (r.Expiration.Days !== undefined) {
days = this._decrementExpirationDay(r.Expiration.Days);
} else if (r.Expiration.Date) {
if (r.Expiration.Date <= this._currentDate) {
Expand Down Expand Up @@ -200,8 +199,8 @@ class RulesReducer {
let storageClass;

if (r.NoncurrentVersionExpiration) {
// 'NoncurrentDays' for NoncurrentVersionExpiration action is a positive integer
if (r.NoncurrentVersionExpiration.NoncurrentDays) {
// 'NoncurrentDays' for NoncurrentVersionExpiration action is a nonnegative integer
if (r.NoncurrentVersionExpiration.NoncurrentDays !== undefined) {
Comment thread
delthas marked this conversation as resolved.
days = this._decrementExpirationDay(r.NoncurrentVersionExpiration.NoncurrentDays);
}
}
Expand Down Expand Up @@ -246,7 +245,7 @@ class RulesReducer {
// NOTE: When you specify the Days tag, Amazon S3 automatically performs ExpiredObjectDeleteMarker
// cleanup when the delete markers are old enough to satisfy the age criteria.
if (r.Expiration) {
if (r.Expiration.Days) {
if (r.Expiration.Days !== undefined) {
days = this._decrementExpirationDay(r.Expiration.Days);
} else if (r.Expiration.Date) {
if (r.Expiration.Date <= this._currentDate) {
Expand Down
23 changes: 23 additions & 0 deletions tests/unit/lifecycle/RulesReducer.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,29 @@ describe('RulesReducer with versioning Disabled', () => {
assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days set to 0', () => {
const currentDate = Date.now();
const prefix = '';
const bucketLCRules = [
{
Expiration: { Days: 0 },
ID: '123',
Prefix: prefix,
Status: 'Enabled',
}
];
const expected = {
currents: [{
prefix: '',
days: 0,
}]
};
const rulesReducer = new RulesReducer(versioningStatus, currentDate, bucketLCRules, options);
const result = rulesReducer.toListings();

assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days and prefix', () => {
const currentDate = Date.now();
const prefix = 'pre';
Expand Down
46 changes: 46 additions & 0 deletions tests/unit/lifecycle/RulesReducerWithVersion.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,28 @@ describe('RulesReducer with versioning Enabled', () => {
assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days set to 0', () => {
const currentDate = Date.now();
const prefix = '';
const bucketLCRules = [
{
Expiration: { Days: 0 },
ID: '123',
Prefix: prefix,
Status: 'Enabled',
}
];
const expected = {
currents: [{ prefix: '', days: 0 }],
nonCurrents: [],
orphans: [{ prefix: '', days: 0 }],
};
const rulesReducer = new RulesReducer(versioningStatus, currentDate, bucketLCRules, options);
const result = rulesReducer.toListings();

assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days and prefix', () => {
const currentDate = Date.now();
const prefix = 'pre';
Expand Down Expand Up @@ -460,6 +482,30 @@ describe('RulesReducer with versioning Enabled', () => {
assert.deepStrictEqual(result, expected);
});

it('with NoncurrentVersionExpiration rule using NoncurrentDays set to 0', () => {
const currentDate = Date.now();
const bucketLCRules = [
{
NoncurrentVersionExpiration: { NoncurrentDays: 0 },
ID: '0',
Prefix: '',
Status: 'Enabled',
},
];
const rulesReducer = new RulesReducer(versioningStatus, currentDate, bucketLCRules, options);
const result = rulesReducer.toListings();

const expected = {
currents: [],
nonCurrents: [{
prefix: '',
days: 0,
}],
orphans: [],
};
assert.deepStrictEqual(result, expected);
});

it('with NoncurrentVersionTransitions rule', () => {
const currentDate = Date.now();
const bucketLCRules = [
Expand Down
25 changes: 25 additions & 0 deletions tests/unit/lifecycle/rules.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,31 @@ describe('rulesToParams with versioning Disabled', () => {
assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days set to 0 (no BeforeDate, lists all)', () => {
const currentDate = Date.now();
const prefix = '';
const bucketLCRules = [
{
Expiration: { Days: 0 },
ID: '123',
Prefix: prefix,
Status: 'Enabled',
}
];
const expected = {
params: {
Bucket: bucketName,
Prefix: prefix,
MaxKeys: MAX_KEYS,
},
listType: 'current',
remainings: []
};

const result = rulesToParams(versioningStatus, currentDate, bucketLCRules, bucketData, options);
assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days and prefix', () => {
const currentDate = Date.now();
const prefix = 'pre';
Expand Down
52 changes: 52 additions & 0 deletions tests/unit/lifecycle/rulesWithVersion.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,33 @@ describe('rulesToParams with versioning Enabled', () => {
assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days set to 0 (no BeforeDate, lists all)', () => {
const currentDate = Date.now();
const bucketLCRules = [
{
Expiration: { Days: 0 },
ID: '123',
Prefix: '',
Status: 'Enabled',
}
];
const expected = {
params: {
Bucket: bucketName,
Prefix: '',
MaxKeys: MAX_KEYS,
},
listType: 'current',
remainings: [{
listType: 'orphan',
prefix: '',
}]
};

const result = rulesToParams(versioningStatus, currentDate, bucketLCRules, bucketData, options);
assert.deepStrictEqual(result, expected);
});

it('with Expiration rule using Days', () => {
const currentDate = Date.now();
const prefix = '';
Expand Down Expand Up @@ -731,6 +758,31 @@ describe('rulesToParams with versioning Enabled', () => {
assert.deepStrictEqual(result, expected);
});

it('with NoncurrentVersionExpiration rule using NoncurrentDays set to 0 (no BeforeDate)', () => {
const currentDate = Date.now();
const bucketLCRules = [
{
NoncurrentVersionExpiration: { NoncurrentDays: 0 },
ID: '123',
Prefix: '',
Status: 'Enabled',
}
];

const expected = {
params: {
Bucket: bucketName,
Prefix: '',
MaxKeys: MAX_KEYS,
},
listType: 'noncurrent',
remainings: []
};

const result = rulesToParams(versioningStatus, currentDate, bucketLCRules, bucketData, options);
assert.deepStrictEqual(result, expected);
});

it('with NoncurrentVersionExpiration and NoncurrentVersionTransitions rules with different prefix', () => {
const currentDate = Date.now();
const expectedBeforeDate = (new Date(currentDate - ONE_DAY_IN_SEC)).toISOString();
Expand Down
Loading