Skip to content

Commit 807c7e1

Browse files
weiyiePeterRao
andauthored
fix: add putSymlink getSymlink deleteMulti getObjectMeta for browser (#786)
Co-authored-by: 饶培泽 <peizerao@gmail.com>
1 parent 8e9711a commit 807c7e1

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-0
lines changed

lib/browser/object.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ merge(proto, require('../common/object/putACL'));
168168
merge(proto, require('../common/object/head'));
169169
merge(proto, require('../common/object/delete'));
170170
merge(proto, require('../common/object/get'));
171+
merge(proto, require('../common/object/putSymlink'));
172+
merge(proto, require('../common/object/getSymlink'));
173+
merge(proto, require('../common/object/deleteMulti'));
174+
merge(proto, require('../common/object/getObjectMeta'));
171175

172176
proto.putMeta = async function putMeta(name, meta, options) {
173177
const copyResult = await this.copy(name, name, {

test/browser/browser.test.js

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,6 +1339,128 @@ describe('browser', () => {
13391339
});
13401340
});
13411341

1342+
describe('symlink()', () => {
1343+
it('Should put and get Symlink', async () => {
1344+
const store = oss(ossConfig);
1345+
const targetName = '/oss/target-测试.js';
1346+
const name = '/oss/symlink-软链接.js';
1347+
let result = await store.put(targetName, Buffer.from('test-symlink'));
1348+
assert.equal(result.res.status, 200);
1349+
1350+
result = await store.putSymlink(name, targetName, {
1351+
storageClass: 'IA',
1352+
meta: {
1353+
uid: '1',
1354+
slus: 'test.html'
1355+
}
1356+
});
1357+
assert.equal(result.res.status, 200);
1358+
1359+
result = await store.getSymlink(name);
1360+
assert.equal(result.res.status, 200);
1361+
// 需要设置暴露headers x-oss-symlink-target
1362+
// assert.equal(result.targetName, store._objectName(targetName));
1363+
1364+
result = await store.head(name);
1365+
1366+
assert.equal(result.res.status, 200);
1367+
// 需要设置暴露headers x-oss-object-type
1368+
assert.equal(result.res.headers['x-oss-object-type'], 'Symlink');
1369+
// 需要设置对应暴露的headers 每个对应meta的header
1370+
// assert.deepEqual(result.meta, {
1371+
// uid: '1',
1372+
// slus: 'test.html'
1373+
// });
1374+
// TODO getObjectMeta should return storage class,
1375+
// headObject return targetObject storage class
1376+
// result = await store.getObjectMeta(name);
1377+
// console.log(result);
1378+
});
1379+
});
1380+
1381+
describe('deleteMulti()', () => {
1382+
const names = [];
1383+
beforeEach(async () => {
1384+
const store = oss(ossConfig);
1385+
let name = `${prefix}ali-sdk/oss/deleteMulti0.js`;
1386+
names.push(name);
1387+
await store.put(name, Buffer.from(name));
1388+
1389+
name = `${prefix}ali-sdk/oss/deleteMulti1.js`;
1390+
names.push(name);
1391+
await store.put(name, Buffer.from(name));
1392+
1393+
name = `${prefix}ali-sdk/oss/deleteMulti2.js`;
1394+
names.push(name);
1395+
await store.put(name, Buffer.from(name));
1396+
});
1397+
1398+
it('should delete 3 exists objs', async () => {
1399+
const store = oss(ossConfig);
1400+
const result = await store.deleteMulti(names);
1401+
assert.deepEqual(result.deleted.map(v => v.Key), names);
1402+
assert.equal(result.res.status, 200);
1403+
});
1404+
1405+
it('should delete 2 exists and 2 not exists objs', async () => {
1406+
const store = oss(ossConfig);
1407+
const result = await store.deleteMulti(names.slice(0, 2).concat(['not-exist1', 'not-exist2']));
1408+
assert.deepEqual(result.deleted.map(v => v.Key), names.slice(0, 2).concat(['not-exist1', 'not-exist2']));
1409+
assert.equal(result.res.status, 200);
1410+
});
1411+
1412+
it('should delete 1 exists objs', async () => {
1413+
const store = oss(ossConfig);
1414+
const result = await store.deleteMulti(names.slice(0, 1));
1415+
assert.deepEqual(result.deleted.map(v => v.Key), names.slice(0, 1));
1416+
assert.equal(result.res.status, 200);
1417+
});
1418+
1419+
it('should delete in quiet mode', async () => {
1420+
const store = oss(ossConfig);
1421+
const result = await store.deleteMulti(names, {
1422+
quiet: true
1423+
});
1424+
assert(result.deleted.length === 0);
1425+
assert.equal(result.res.status, 200);
1426+
});
1427+
});
1428+
1429+
describe('getObjectMeta()', () => {
1430+
let name;
1431+
let resHeaders;
1432+
let fileSize;
1433+
before(async () => {
1434+
const store = oss(ossConfig);
1435+
name = `${prefix}ali-sdk/oss/object-meta.js`;
1436+
const fileContent = Array(10 * 100 * 1024).fill('a').join('');
1437+
const file = new File([fileContent], 'multipart-upload-part');
1438+
const object = await store.put(name, file);
1439+
fileSize = 10 * 100 * 1024;
1440+
assert.equal(typeof object.res.headers['x-oss-request-id'], 'string');
1441+
resHeaders = object.res.headers;
1442+
});
1443+
1444+
it('should head not exists object throw NoSuchKeyError', async () => {
1445+
const store = oss(ossConfig);
1446+
try {
1447+
await store.head(`${name}not-exists`);
1448+
} catch (error) {
1449+
assert.equal(error.name, 'NoSuchKeyError');
1450+
assert.equal(error.status, 404);
1451+
assert.equal(typeof error.requestId, 'string');
1452+
}
1453+
});
1454+
1455+
it('should return Etag and Content-Length', async () => {
1456+
const store = oss(ossConfig);
1457+
const info = await store.getObjectMeta(name);
1458+
assert.equal(info.status, 200);
1459+
assert.equal(info.res.headers.etag, resHeaders.etag);
1460+
assert.equal(info.res.headers['content-length'], fileSize);
1461+
});
1462+
});
1463+
13421464
describe('request time is skew', () => {
13431465
it('When the client\'s date is skew, the request will calibration time and retry', async () => {
13441466
const store = oss(ossConfig);

0 commit comments

Comments
 (0)