Skip to content

Commit

Permalink
feat: callback support for callbackSNI
Browse files Browse the repository at this point in the history
  • Loading branch information
csg01123119 committed Aug 6, 2024
1 parent 05214d4 commit 6835c32
Show file tree
Hide file tree
Showing 9 changed files with 227 additions and 20,288 deletions.
20,274 changes: 0 additions & 20,274 deletions package-lock.json

This file was deleted.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"test": "npm run tsc && mocha -t 120000 -r should -r dotenv/config test/node/*.test.js test/node/**/*.test.js",
"test-cov": "npm run tsc && nyc --reporter=lcov node_modules/.bin/_mocha -t 120000 -r should test/node/*.test.js test/node/**/*.test.js",
"jshint": "jshint .",
"build-test": "MINIFY=1 node browser-build.js > test/browser/build/aliyun-oss-sdk.min.js && node -r dotenv/config task/browser-test-build.js > test/browser/build/tests.js",
"build-test": "mkdir -p ./test/browser/build && MINIFY=1 node browser-build.js > test/browser/build/aliyun-oss-sdk.min.js && node -r dotenv/config task/browser-test-build.js > test/browser/build/tests.js",
"browser-test": "npm run build-test && karma start",
"build-dist": "npm run tsc && node browser-build.js > dist/aliyun-oss-sdk.js && MINIFY=1 node browser-build.js > dist/aliyun-oss-sdk.min.js",
"publish-to-npm": "node publish-npm-check.js && npm publish",
Expand Down
1 change: 1 addition & 0 deletions task/browser-test-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ function build(options, callback) {
stsConfFile,
JSON.stringify(
Object.assign({}, stsConf, {
callbackServer: env.ALI_SDK_CALLBACK_IP,
bucket: conf.bucket,
region: conf.region
})
Expand Down
21 changes: 13 additions & 8 deletions test/browser/browser.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1790,13 +1790,15 @@ describe('browser', () => {

// TODO fix callback server
// it('should upload no more 100k file with callback server', async () => {
// const fileContent = Array(50 * 1024).fill('a').join('');
// const fileContent = Array(50 * 1024)
// .fill('a')
// .join('');
// const file = new File([fileContent], 'multipart-callback-server');
// const name = `${prefix}multipart/callback-server`;
// const result = await store.multipartUpload(name, file, {
// partSize: 100 * 1024,
// callback: {
// url: callbackServer,
// url: stsConfig.callbackServer,
// host: 'oss-cn-hangzhou.aliyuncs.com',
// /* eslint no-template-curly-in-string: [0] */
// body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
Expand All @@ -1808,19 +1810,22 @@ describe('browser', () => {
// }
// }
// });

// assert.equal(result.res.status, 200);
// assert.equal(result.data.Status, 'OK');
// assert.equal(result.data.object, name);
// });

// TODO fix callback server
// it('should multipart upload file with callback server', async () => {
// const fileContent = Array(1024 * 1024).fill('a').join('');
// const fileContent = Array(1024 * 1024)
// .fill('a')
// .join('');
// const file = new File([fileContent], 'multipart-callback-server');
// const name = `${prefix}multipart/callback-server`;
// const result = await store.multipartUpload(name, file, {
// partSize: 100 * 1024,
// callback: {
// url: callbackServer,
// url: stsConfig.callbackServer,
// host: 'oss-cn-hangzhou.aliyuncs.com',
// body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
// contentType: 'application/x-www-form-urlencoded',
Expand All @@ -1832,7 +1837,7 @@ describe('browser', () => {
// }
// });
// assert.equal(result.res.status, 200);
// assert.equal(result.data.Status, 'OK');
// assert.equal(result.data.object, name);
// });

// TODO fix callback server
Expand All @@ -1854,7 +1859,7 @@ describe('browser', () => {
// },
// partSize: 100 * 1024,
// callback: {
// url: 'http://oss-demo.aliyuncs.com:23450',
// url: stsConfig.callbackServer,
// host: 'oss-cn-hangzhou.aliyuncs.com',
// /* eslint no-template-curly-in-string: [0] */
// body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
Expand All @@ -1881,7 +1886,7 @@ describe('browser', () => {
// partSize: 100 * 1024,
// checkpoint: tempCheckpoint,
// callback: {
// url: 'http://oss-demo.aliyuncs.com:23450',
// url: stsConfig.callbackServer,
// host: 'oss-cn-hangzhou.aliyuncs.com',
// /* eslint no-template-curly-in-string: [0] */
// body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
Expand Down
3 changes: 2 additions & 1 deletion test/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ config.sts = {
roleArn: env.ALI_SDK_STS_ROLE,
bucket: env.ALI_SDK_STS_BUCKET,
// endpoint: env.ONCI ? 'https://sts.aliyuncs.com/' : undefined,
maxSocket: 50
maxSocket: 50,
callbackServer: env.ALI_SDK_CALLBACK_IP
};

config.metaSyncTime = env.ONCI ? '1s' : '1000ms';
Expand Down
208 changes: 208 additions & 0 deletions test/node/callback.temp.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
/* eslint-disable @typescript-eslint/no-require-imports */
// TODO callback server is disable
const fs = require('fs');
const assert = require('assert');
const utils = require('./utils');
const oss = require('../../lib/client');
const { sts } = require('../config');
const config = require('../config').oss;
const mm = require('mm');

/*
* temp test callback
* multipartUpload
* put
*/
describe.skip('test/callback.test.js', () => {
const { prefix } = utils;
let store;
let bucket;
let bucketRegion;
const {
env: { ALI_SDK_CALLBACK_IP: callbackServer }
} = process;

before(async () => {
store = oss(config);
bucket = sts.bucket;
bucketRegion = config.region;
store.useBucket(bucket, bucketRegion);
});

after(async () => {
// await utils.cleanBucket(store, bucket, bucketRegion);
});

describe('upload callback', () => {
afterEach(mm.restore);
it('should multipart upload parse response with callback false', async () => {
const fileName = await utils.createTempFile('upload-with-callback', 1024 * 1024);

const name = `${prefix}multipart/upload-with-callback`;
const host = 'oss-cn-hangzhou.aliyuncs.com';
const var1 = 'value1';
const result = await store.multipartUpload(name, fileName, {
partSize: 300 * 1024,
callback: {
url: callbackServer,
host,
/* eslint no-template-curly-in-string: [0] */
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
contentType: 'application/x-www-form-urlencoded',
callbackSNI: false,
customValue: {
var1,
var2: 'value2'
}
}
});
assert.equal(result.res.status, 200);
const { sni } = result.data;
assert.equal(sni, false);
});

it('should multipart upload parse response with callback', async () => {
const fileName = await utils.createTempFile('upload-with-callback', 1024 * 1024);

const name = `${prefix}multipart/upload-with-callback`;
const host = 'oss-cn-hangzhou.aliyuncs.com';
const var1 = 'value1';
const result = await store.multipartUpload(name, fileName, {
partSize: 300 * 1024,
callback: {
url: callbackServer,
host,
/* eslint no-template-curly-in-string: [0] */
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
contentType: 'application/x-www-form-urlencoded',
callbackSNI: true,
customValue: {
var1,
var2: 'value2'
}
}
});
assert.equal(result.res.status, 200);
const { sni, var1: va, object: obj } = result.data;
assert.equal(sni, host);
assert.equal(var1, va);
assert.equal(obj, name);
});

it('should multipart upload copy with callback', async () => {
const fileName = await utils.createTempFile('multipart-upload-file-copy-callback', 2 * 1024 * 1024);
const name = `${prefix}multipart/upload-file-with-copy-callback`;
await store.multipartUpload(name, fileName);

const client = store;
const copyName = `${prefix}multipart/upload-file-with-copy-new-callback`;
const result = await client.multipartUploadCopy(
copyName,
{
sourceKey: name,
sourceBucketName: bucket
},
{
partSize: 256 * 1024,
callback: {
url: callbackServer,
host: 'oss-cn-hangzhou.aliyuncs.com',
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
contentType: 'application/x-www-form-urlencoded',
callbackSNI: true,
customValue: {
var1: 'value1',
var2: 'value2'
}
},
copyheaders: {
'x-oss-copy-source-if-match': ''
}
}
);

assert.equal(result.res.status, 200);
assert.equal(result.data.object, copyName);
});

it('should multipart upload with no more 100k file parse response with callback', async () => {
const fileName = await utils.createTempFile('upload-with-callback', 50 * 1024);

const name = `${prefix}multipart/upload-with-callback`;
const result = await store.multipartUpload(name, fileName, {
partSize: 100 * 1024,
callback: {
url: callbackServer,
host: 'oss-cn-hangzhou.aliyuncs.com',
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
contentType: 'application/x-www-form-urlencoded',
callbackSNI: true,
customValue: {
var1: 'value1',
var2: 'value2'
}
}
});
assert.equal(result.res.status, 200);
assert.equal(result.data.object, name);
});

it('should putStream parse response with callback', async () => {
const name = `${prefix}ali-sdk/oss/putstream-callback.js`;
const result = await store.putStream(name, fs.createReadStream(__filename), {
callback: {
url: callbackServer,
host: 'oss-cn-hangzhou.aliyuncs.com',
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
contentType: 'application/x-www-form-urlencoded',
callbackSNI: true,
customValue: {
var1: 'value1',
var2: 'value2'
}
}
});

assert.equal(result.res.status, 200);
assert.equal(result.data.object, name);
});

it('should put parse response with callback', async () => {
const name = `${prefix}ali-sdk/oss/put-callback.js`;
const result = await store.put(name, __filename, {
callback: {
url: callbackServer,
host: 'oss-cn-hangzhou.aliyuncs.com',
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
contentType: 'application/x-www-form-urlencoded',
callbackSNI: true,
customValue: {
var1: 'value1',
var2: 'value2'
}
}
});

assert.equal(result.res.status, 200);
assert.equal(result.data.object, name);
});

it('should multipart upload with no more 100k file use header x-oss-callback', async () => {
// create a file with 1M random data
const fileName = await utils.createTempFile('upload-with-callback', 50 * 1024);
const callback = {
url: callbackServer,
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}'
};
const name = `${prefix}multipart/upload-with-callback`;
const result = await store.multipartUpload(name, fileName, {
partSize: 100 * 1024,
headers: {
'x-oss-callback': utils.encodeCallback(callback)
}
});
assert.equal(result.res.status, 200);
assert.equal(result.data.object, name);
});
});
});
6 changes: 2 additions & 4 deletions test/node/callback.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,12 @@
// * multipartUpload
// * put
// */
// describe.skip('test/callback.test.js', () => {
// describe.only('test/callback.test.js', () => {
// const { prefix } = utils;
// let store;
// let bucket;
// let bucketRegion;
// const {
// env: { ALI_SDK_CALLBACK_IP: callbackServer }
// } = process;
// const { callbackServer } = sts;

// before(async () => {
// store = oss(config);
Expand Down
Binary file removed test/node/fixtures/nodejs-processed-w200-latest.png
Binary file not shown.
Binary file removed test/node/fixtures/nodejs-processed-w200.png
Binary file not shown.

0 comments on commit 6835c32

Please sign in to comment.