diff --git a/.kokoro/datacatalog/cloud-client/lookup-entry.cfg b/.kokoro/datacatalog.cfg similarity index 57% rename from .kokoro/datacatalog/cloud-client/lookup-entry.cfg rename to .kokoro/datacatalog.cfg index e7dae3099d..fca8962802 100644 --- a/.kokoro/datacatalog/cloud-client/lookup-entry.cfg +++ b/.kokoro/datacatalog.cfg @@ -10,16 +10,4 @@ env_vars: { env_vars: { key: "TRAMPOLINE_BUILD_FILE" value: "github/nodejs-docs-samples/.kokoro/build.sh" -} - -# Specify the project that contains a valid dataset. -env_vars: { - key: "GCLOUD_PROJECT" - value: "bigquery-public-data" -} - -# Specify the dataset related to the project. -env_vars: { - key: "GCLOUD_DATASET_ID" - value: "new_york_taxi_trips" } \ No newline at end of file diff --git a/datacatalog/cloud-client/createEntryGroup.js b/datacatalog/cloud-client/createEntryGroup.js new file mode 100644 index 0000000000..90a9c5c440 --- /dev/null +++ b/datacatalog/cloud-client/createEntryGroup.js @@ -0,0 +1,65 @@ +/* eslint-disable no-warning-comments */ + +/** + * Copyright 2019 Google Inc. All Rights Reserved. + * 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'; + +/** + * This application demonstrates how to create a Entry Group with the + * Cloud Data Catalog API. + + * For more information, see the README.md under /datacatalog and the + * documentation at https://cloud.google.com/data-catalog/docs. + */ +const main = async (projectId = process.env.GCLOUD_PROJECT, entryGroupId) => { + // [START datacatalog_create_entry_group_tag] + // ------------------------------- + // Import required modules. + // ------------------------------- + const {DataCatalogClient} = require('@google-cloud/datacatalog').v1beta1; + const datacatalog = new DataCatalogClient(); + + // Currently, Data Catalog stores metadata in the + // us-central1 region. + const location = 'us-central1'; + + // TODO(developer): Uncomment the following lines before running the sample. + // const projectId = 'my-project' + // const entryGroupId = 'my-entry-group' + + // Create an Entry Group. + // Construct the EntryGroup for the EntryGroup request. + const entryGroup = { + displayName: 'My Fileset Entry Group', + description: 'This Entry Group consists of ....', + }; + + // Construct the EntryGroup request to be sent by the client. + const entryGroupRequest = { + parent: datacatalog.locationPath(projectId, location), + entryGroupId, + entryGroup, + }; + + // Use the client to send the API request. + const [response] = await datacatalog.createEntryGroup(entryGroupRequest); + + console.log(response); + // [END datacatalog_create_entry_group_tag] +}; + +// node createEntryGroup.js +main(...process.argv.slice(2)); diff --git a/datacatalog/cloud-client/createFilesetEntry.js b/datacatalog/cloud-client/createFilesetEntry.js new file mode 100644 index 0000000000..1fc9d7dfe0 --- /dev/null +++ b/datacatalog/cloud-client/createFilesetEntry.js @@ -0,0 +1,110 @@ +/* eslint-disable no-warning-comments */ + +/** + * Copyright 2019 Google Inc. All Rights Reserved. + * 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'; + +/** + * This application demonstrates how to create a fileset Entry with the + * Cloud Data Catalog API. + + * For more information, see the README.md under /datacatalog and the + * documentation at https://cloud.google.com/data-catalog/docs. + */ +const main = async ( + projectId = process.env.GCLOUD_PROJECT, + entryGroupId, + entryId +) => { + // [START datacatalog_create_fileset_tag] + // ------------------------------- + // Import required modules. + // ------------------------------- + const {DataCatalogClient} = require('@google-cloud/datacatalog').v1beta1; + const datacatalog = new DataCatalogClient(); + + // Currently, Data Catalog stores metadata in the + // us-central1 region. + const location = 'us-central1'; + + // TODO(developer): Uncomment the following lines before running the sample. + // const projectId = 'my-project' + // const entryGroupId = 'my-entry-group' + // const entryId = 'my-entry' + + // Create a Fileset Entry. + // Construct the Entry for the Entry request. + const FILESET_TYPE = 4; + + const entry = { + displayName: 'My Fileset', + description: 'This fileset consists of ....', + gcsFilesetSpec: {filePatterns: ['gs://my_bucket/*']}, + schema: { + columns: [ + { + column: 'city', + description: 'City', + mode: 'NULLABLE', + type: 'STRING', + }, + { + column: 'state', + description: 'State', + mode: 'NULLABLE', + type: 'STRING', + }, + { + column: 'addresses', + description: 'Addresses', + mode: 'REPEATED', + subcolumns: [ + { + column: 'city', + description: 'City', + mode: 'NULLABLE', + type: 'STRING', + }, + { + column: 'state', + description: 'State', + mode: 'NULLABLE', + type: 'STRING', + }, + ], + type: 'RECORD', + }, + ], + }, + type: FILESET_TYPE, + }; + + // Construct the Entry request to be sent by the client. + const request = { + parent: datacatalog.entryGroupPath(projectId, location, entryGroupId), + entryId, + entry, + }; + + // Use the client to send the API request. + const [response] = await datacatalog.createEntry(request); + + console.log(response); + // [END datacatalog_create_fileset_tag] +}; + +// node createFilesetEntry.js +main(...process.argv.slice(2)); diff --git a/datacatalog/cloud-client/lookupEntry.js b/datacatalog/cloud-client/lookupEntry.js index f37e36c07b..e255deaebf 100644 --- a/datacatalog/cloud-client/lookupEntry.js +++ b/datacatalog/cloud-client/lookupEntry.js @@ -24,10 +24,7 @@ * For more information, see the README.md under /datacatalog and the * documentation at https://cloud.google.com/data-catalog/docs. */ -const main = async ( - projectId = process.env.GCLOUD_PROJECT, - datasetId = process.env.GCLOUD_DATASET_ID -) => { +const main = async (projectId, datasetId) => { // [START datacatalog_lookup_dataset] // ------------------------------- // Import required modules. diff --git a/datacatalog/cloud-client/package.json b/datacatalog/cloud-client/package.json index 51e526f6e9..5cc098a1fd 100644 --- a/datacatalog/cloud-client/package.json +++ b/datacatalog/cloud-client/package.json @@ -14,10 +14,11 @@ }, "devDependencies": { "@google-cloud/nodejs-repo-tools": "^3.3.0", - "mocha": "^6.0.0" + "mocha": "^6.0.0", + "uuid": "^3.1.0" }, "dependencies": { - "@google-cloud/datacatalog": "^1.0.1" + "@google-cloud/datacatalog": "^1.3.0" }, "cloud-repo-tools": { "requiresKeyFile": true, diff --git a/datacatalog/cloud-client/system-test/createEntryGroup.test.js b/datacatalog/cloud-client/system-test/createEntryGroup.test.js new file mode 100644 index 0000000000..f3550f1ee7 --- /dev/null +++ b/datacatalog/cloud-client/system-test/createEntryGroup.test.js @@ -0,0 +1,52 @@ +/** + * Copyright 2019 Google Inc. All Rights Reserved. + * 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'); +const assert = require('assert'); +const tools = require('@google-cloud/nodejs-repo-tools'); +const uuid = require('uuid'); +const cwd = path.join(__dirname, '..'); + +const projectId = process.env.GCLOUD_PROJECT; +// Use unique id to avoid conflicts between concurrent test runs +const entryGroupId = `fileset_entry_group_${uuid.v4().substr(0, 8)}`; +const location = 'us-central1'; + +const {DataCatalogClient} = require('@google-cloud/datacatalog').v1beta1; +const datacatalog = new DataCatalogClient(); + +before(tools.checkCredentials); + +describe('createEntryGroup', () => { + it('should create a entry group', async () => { + const output = await tools.runAsync( + `node createEntryGroup.js ${projectId} ${entryGroupId}`, + cwd + ); + const expectedName = `projects/${projectId}/locations/${location}/entryGroups/${entryGroupId}`; + assert.ok(output.includes(expectedName)); + }); + + after(async () => { + const entryGroupPath = datacatalog.entryGroupPath( + projectId, + location, + entryGroupId + ); + await datacatalog.deleteEntryGroup({name: entryGroupPath}); + }); +}); diff --git a/datacatalog/cloud-client/system-test/createFilesetEntry.test.js b/datacatalog/cloud-client/system-test/createFilesetEntry.test.js new file mode 100644 index 0000000000..f55c3cf16c --- /dev/null +++ b/datacatalog/cloud-client/system-test/createFilesetEntry.test.js @@ -0,0 +1,68 @@ +/** + * Copyright 2019 Google Inc. All Rights Reserved. + * 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'); +const assert = require('assert'); +const tools = require('@google-cloud/nodejs-repo-tools'); +const uuid = require('uuid'); +const cwd = path.join(__dirname, '..'); + +const projectId = process.env.GCLOUD_PROJECT; +// Use unique id to avoid conflicts between concurrent test runs +const entryGroupId = `fileset_entry_group_${uuid.v4().substr(0, 8)}`; +const entryId = `fileset_entry_id_${uuid.v4().substr(0, 8)}`; +const location = 'us-central1'; + +const {DataCatalogClient} = require('@google-cloud/datacatalog').v1beta1; +const datacatalog = new DataCatalogClient(); + +before(tools.checkCredentials); + +describe('createFilesetEntry', () => { + before(async () => { + // Must create entryGroup before creating entry + await tools.runAsync( + `node createEntryGroup.js ${projectId} ${entryGroupId}`, + cwd + ); + }); + + it('should create a fileset entry', async () => { + const output = await tools.runAsync( + `node createFilesetEntry.js ${projectId} ${entryGroupId} ${entryId}`, + cwd + ); + const expectedLinkedResource = `//datacatalog.googleapis.com/projects/${projectId}/locations/${location}/entryGroups/${entryGroupId}/entries/${entryId}`; + assert.ok(output.includes(expectedLinkedResource)); + }); + + after(async () => { + const entryPath = datacatalog.entryPath( + projectId, + location, + entryGroupId, + entryId + ); + await datacatalog.deleteEntry({name: entryPath}); + const entryGroupPath = datacatalog.entryGroupPath( + projectId, + location, + entryGroupId + ); + await datacatalog.deleteEntryGroup({name: entryGroupPath}); + }); +}); diff --git a/datacatalog/cloud-client/system-test/datacatalog.test.js b/datacatalog/cloud-client/system-test/lookupEntry.test.js similarity index 64% rename from datacatalog/cloud-client/system-test/datacatalog.test.js rename to datacatalog/cloud-client/system-test/lookupEntry.test.js index 621c61d9f5..a1e9933743 100644 --- a/datacatalog/cloud-client/system-test/datacatalog.test.js +++ b/datacatalog/cloud-client/system-test/lookupEntry.test.js @@ -18,18 +18,19 @@ const path = require('path'); const assert = require('assert'); const tools = require('@google-cloud/nodejs-repo-tools'); - const cwd = path.join(__dirname, '..'); -const projectId = process.env.GCLOUD_PROJECT; -const datasetId = process.env.GCLOUD_DATASET_ID; before(tools.checkCredentials); -it('should lookup a dataset entry', async () => { - const output = await tools.runAsync( - `node lookupEntry.js ${projectId} ${datasetId}`, - cwd - ); - const expectedLinkedResource = `//bigquery.googleapis.com/projects/${projectId}/datasets/${datasetId}`; - assert.ok(output.includes(expectedLinkedResource)); +describe('lookupEntry lookup', () => { + it('should lookup a dataset entry', async () => { + const projectId = 'bigquery-public-data'; + const datasetId = 'new_york_taxi_trips'; + const output = await tools.runAsync( + `node lookupEntry.js ${projectId} ${datasetId}`, + cwd + ); + const expectedLinkedResource = `//bigquery.googleapis.com/projects/${projectId}/datasets/${datasetId}`; + assert.ok(output.includes(expectedLinkedResource)); + }); });