From fce7f6a84a588dd05df041c9b65b3c3b1730dc2a Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 14 Oct 2016 04:19:53 -0700 Subject: [PATCH] Add tests for china and validate ip address as well. (#517) --- .gitignore | 1 + .travis.yml | 23 ++++++++++++++--------- src/main/helpers.js | 16 +++++++++++----- src/test/unit/test.js | 24 +++++++++++++++++++++++- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 9008fe90..d09439de 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ logs node_modules /dist/ +yarn.lock \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 3d586092..bf886c49 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,11 @@ -sudo: false language: node_js +cache: + directories: + - $HOME/.npm + - $HOME/.yarn-cache + - node_modules + os: - linux @@ -9,16 +14,16 @@ env: - ARCH=i686 node_js: -- '0.10' -- '0.11' -- '0.12' -- '4.2.4' +- '6' +- '5' +- '4' script: - gulp browserify - gulp lint -- npm test -notifications: - slack: - secure: cnwaQJv7JtcnBU+FOzXuX5LI2SW9zzQVBkxvKUXqGzMJwiKnrpRP9JZtWdDFcafE+QDhUMfzjM7SsAdyZuq+wRm1I/TNylxDvJibVRxbKDlJQgoHvJ9+OdfXwwAfv4uS13ko/jSiLGdOvByWljA85ASoDRBzlhpb/bfVfx2chFA6sZHMmvKBD/Kk2x7WqkHvbHdh6qvsuwnYZAQNHQkHRr/ZljIzuer1OQHrzqPg1sTSiqRXv0/CqZ2g0ILXlaWTu07EbPmGmr5Ua0ViPK3C6Rlgve4LVS3T+QJZp5FQHlZX/9dN1LK0OZRfyQ2rfV3HiRDtF0BPxuPhMLDYgy9UIX0wXo+45+i1dzNJoyN7VrOaBmgPdZyy4thmc6sR/aU5l7jQjEG2SYQDUwYJYIQmdZ7f2YXQNqQvWSW+e+/TYmiXg/q/wOWYtMpDDwtXB3xedAs1GZCKRKpSUQHiTbUKbD5vNLWEfpcHzmU4gJBMp5kcWmhzPLOx3JogfUioCKWMWe0dgt4koX8RN7oLUlHqROOQfCDAIb6Pbo+tvoYsIlihzGO0zPewDnwU3dxwjWnP7mT8+8uDHvn5WFS9rFtPp/UThyASZuKEj1llA2UPJJ0OVa2tC8qz5qfDnty7B5yY9bFQhjfnR+DHiIjyj4o3VkkzmRuDk4qWqiABTayuOqk= +before_install: +- npm i -g yarn + +install: +- yarn diff --git a/src/main/helpers.js b/src/main/helpers.js index ee70cadb..f9586351 100644 --- a/src/main/helpers.js +++ b/src/main/helpers.js @@ -56,9 +56,9 @@ export function getScope(region, date) { return `${date.format('YYYYMMDD')}/${region}/s3/aws4_request` } -// isAmazonEndpoint - true if endpoint is 's3.amazonaws.com'. +// isAmazonEndpoint - true if endpoint is 's3.amazonaws.com' or 's3.cn-north-1.amazonaws.com.cn' export function isAmazonEndpoint(endpoint) { - return endpoint === 's3.amazonaws.com' + return endpoint === 's3.amazonaws.com' || endpoint === 's3.cn-north-1.amazonaws.com.cn' } // isVirtualHostStyle - verify if bucket name is support with virtual @@ -73,18 +73,24 @@ export function isVirtualHostStyle(endpoint, protocol, bucket) { return isAmazonEndpoint(endpoint) } +var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; + +export function isValidIP(ip) { + return ipv4Regex.test(ip) +} + // isValidEndpoint - true if endpoint is valid domain. export function isValidEndpoint(endpoint) { - if (!isValidDomain(endpoint)) { + if (!isValidDomain(endpoint) && !isValidIP(endpoint)) { return false } // Endpoint matches amazon, make sure its 's3.amazonaws.com' - if (endpoint.match('.amazonaws.com$')) { + if (endpoint.match('.amazonaws.com$') || endpoint.match('.amazonaws.com.cn$')) { if (!isAmazonEndpoint(endpoint)) { return false } } - // Returning true for all other cases. + // Return true. return true } diff --git a/src/test/unit/test.js b/src/test/unit/test.js index b2ffedb6..9470b721 100644 --- a/src/test/unit/test.js +++ b/src/test/unit/test.js @@ -23,11 +23,33 @@ import Nock from 'nock'; import Through2 from 'through2'; import Stream from 'stream'; import * as Minio from '../../../dist/main/minio'; +import { isValidEndpoint, isValidIP } from '../../../dist/main/helpers'; -import { parseBucketPolicy, generateBucketPolicy } from '../../../dist/main/bucket-policy' +import { parseBucketPolicy, generateBucketPolicy } from '../../../dist/main/bucket-policy'; var Package = require('../../../package.json') +describe('Helpers', () => { + it('should validate for s3 endpoint', () => { + assert.equal(isValidEndpoint('s3.amazonaws.com'), true) + }) + it('should validate for s3 china', () => { + assert.equal(isValidEndpoint('s3.cn-north-1.amazonaws.com.cn'), true) + }) + it('should fail for invalid endpoint', () => { + assert.equal(isValidEndpoint('s3-us-west-2.amazonaws.com'), false) + }) + it('should fail for invalid endpoint characters', () => { + assert.equal(isValidEndpoint('111.#2.11'), false) + }) + it('should validate for valid ip', () => { + assert.equal(isValidIP('1.1.1.1'), true) + }) + it('should fail for invalid ip', () => { + assert.equal(isValidIP('1.1.1'), false) + }) +}) + describe('Client', function() { var nockRequests = [] this.timeout(5000)