Skip to content
This repository has been archived by the owner on Jul 13, 2023. It is now read-only.

docs(samples): add quickstart code for ExportAssets #50

Merged
merged 12 commits into from
Nov 20, 2018
16 changes: 13 additions & 3 deletions samples/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,19 @@
"**/*.test.js"
]
},
"scripts": {},
"scripts": {
"test": "repo-tools test run --cmd mocha system-test/*.test.js"
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
},
"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"
}
}
70 changes: 60 additions & 10 deletions samples/quickstart.js
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -15,14 +15,64 @@

'use strict';

// [START asset_quickstart]
peter-zheng-g marked this conversation as resolved.
Show resolved Hide resolved
// 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://<my_bucket>/<my_asset_file>'
const outputConfig = {
gcsDestination: {
uri: dumpFilePath,
},
};
const request = {
parent: projectResource,
outputConfig: outputConfig,
};

// Handle the operation using the promise pattern.
let responses = await client.exportAssets(request);
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
const operation = responses[0];
// Operation#promise starts polling for the completion of the operation.
responses = await operation.promise();
// The final result of the operation.
const result = responses[0];
// The metadata value of the completed operation.
// var metadata = responses[1];
// The response of the api call returning the complete operation.
// var finalApiResponse = responses[2];
// Do things with with the response.
console.log(result);
// [END asset_quickstart_exportassets]
}

const cli = require('yargs')
.demand(1)
.command(
`export-assets <dumpFilePath>`,
`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));
}
51 changes: 51 additions & 0 deletions samples/system-test/quickstart.test.js
Original file line number Diff line number Diff line change
@@ -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 path = require(`path`);
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
const test = require(`ava`);
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
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`, {});
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved

const storage = new Storage();
const bucketName = `asset-nodejs-${uuid.v4()}`;
const bucket = storage.bucket(bucketName);

test.before(tools.checkCredentials);
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
test.before(async () => {
await bucket.create();
});

test.after.always(async () => {
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
await bucket.delete();
});

test.beforeEach(tools.stubConsole);
test.afterEach.always(tools.restoreConsole);

test.serial(`should export assets to specified path`, async t => {
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
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();
t.true(exists);
JustinBeckwith marked this conversation as resolved.
Show resolved Hide resolved
await file.delete();
});