From 91bcc0a89a796e4aad7434f5fae7d587080dc8cf Mon Sep 17 00:00:00 2001 From: peter-zheng-g <43967553+peter-zheng-g@users.noreply.github.com> Date: Mon, 19 Nov 2018 16:15:31 -0800 Subject: [PATCH] docs(samples): add quickstart code for ExportAssets (#50) --- .eslintrc.yml | 1 + samples/package.json | 16 +++++-- samples/quickstart.js | 63 ++++++++++++++++++++++---- samples/system-test/quickstart.test.js | 51 +++++++++++++++++++++ 4 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 samples/system-test/quickstart.test.js diff --git a/.eslintrc.yml b/.eslintrc.yml index 73eeec27..0e883b65 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -7,6 +7,7 @@ plugins: - node - prettier rules: + node/no-unpublished-require: off prettier/prettier: error block-scoped-var: error eqeqeq: error diff --git a/samples/package.json b/samples/package.json index 6173a72d..6a2db240 100644 --- a/samples/package.json +++ b/samples/package.json @@ -14,9 +14,19 @@ "**/*.test.js" ] }, - "scripts": {}, + "scripts": { + "test": "mocha system-test --timeout 20000" + }, "dependencies": { - "@google-cloud/asset": "^0.1.0" + "@google-cloud/asset": "^0.1.0", + "@google-cloud/storage": "^2.3.0", + "express": "^4.16.4", + "uuid": "^3.3.2", + "yargs": "^12.0.0" }, - "devDependencies": {} + "devDependencies": { + "@google-cloud/nodejs-repo-tools": "^3.0.0", + "mocha": "^5.2.0", + "sinon": "^7.0.0" + } } diff --git a/samples/quickstart.js b/samples/quickstart.js index 88ca9ff5..71befdb8 100644 --- a/samples/quickstart.js +++ b/samples/quickstart.js @@ -1,5 +1,5 @@ /** - * Copyright 2018, Google LLC. + * Copyright 2018, Google, LLC. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -15,14 +15,57 @@ 'use strict'; -// [START asset_quickstart] -// Imports the Google Cloud client library -const asset = require('@google-cloud/asset'); +async function exportAssets(dumpFilePath) { + // [START asset_quickstart_exportassets] + const asset = require('@google-cloud/asset'); + const client = new asset.v1beta1.AssetServiceClient({ + // optional auth parameters. + }); -// eslint-disable-next-line -const client = new asset.AssetServiceClient({ - projectId: 'your-project-id', - keyFilename: '/path/to/keyfile.json', -}); + // Your Google Cloud Platform project ID + const projectId = process.env.GCLOUD_PROJECT; + const projectResource = client.projectPath(projectId); -// [END asset_quickstart] + // var dumpFilePath = 'Dump file path, e.g.: gs:///' + const outputConfig = { + gcsDestination: { + uri: dumpFilePath, + }, + }; + const request = { + parent: projectResource, + outputConfig: outputConfig, + }; + + // Handle the operation using the promise pattern. + const [operation] = await client.exportAssets(request); + // Operation#promise starts polling for the completion of the operation. + const [result] = await operation.promise(); + // Do things with with the response. + console.log(result); + // [END asset_quickstart_exportassets] +} + +const cli = require('yargs') + .demand(1) + .command( + 'export-assets ', + 'Export asserts to specified dump file path.', + {}, + opts => exportAssets(opts.dumpFilePath) + ) + .example( + 'node $0 export-assets gs://my-bucket/my-assets.txt', + 'Export assets to gs://my-bucket/my-assets.txt.' + ) + .wrap(10) + .recommendCommands() + .epilogue( + 'https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview' + ) + .help() + .strict(); + +if (module === require.main) { + cli.parse(process.argv.slice(2)); +} diff --git a/samples/system-test/quickstart.test.js b/samples/system-test/quickstart.test.js new file mode 100644 index 00000000..248423b0 --- /dev/null +++ b/samples/system-test/quickstart.test.js @@ -0,0 +1,51 @@ +/** + * Copyright 2018, Google, LLC. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const assert = require('assert'); +const path = require('path'); +const test = require('mocha'); +const tools = require('@google-cloud/nodejs-repo-tools'); +const util = require('util'); +const uuid = require('uuid'); +const cwd = path.join(__dirname, '..'); +const cmd = 'node quickstart.js'; + +const {Storage} = require('@google-cloud/storage'); + +const storage = new Storage(); +const bucketName = `asset-nodejs-${uuid.v4()}`; +const bucket = storage.bucket(bucketName); + +test.describe('quickstart sample tests', () => { + test.before(tools.checkCredentials); + test.before(async () => { + await bucket.create(); + }); + + test.after(async () => { + await bucket.delete(); + }); + + test.it('should export assets to specified path', async () => { + const dumpFilePath = util.format('gs://%s/my-assets.txt', bucketName); + await tools.runAsyncWithIO(`${cmd} export-assets ${dumpFilePath}`, cwd); + const file = await bucket.file('my-assets.txt'); + const [exists] = await file.exists(); + assert.ok(exists); + await file.delete(); + }); +});