@@ -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