From 82d2435d7b697c7c32a7358a4b3f65e47a14c4d7 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Mon, 17 Jul 2017 16:11:29 -0700 Subject: [PATCH] BigQuery: Add explicit service account key auth sample. --- bigquery/cloud-client/.gitignore | 1 + .../com/example/bigquery/AuthSnippets.java | 95 +++++++++++++++++++ .../com/example/bigquery/AuthSnippetsIT.java | 55 +++++++++++ 3 files changed, 151 insertions(+) create mode 100644 bigquery/cloud-client/.gitignore create mode 100644 bigquery/cloud-client/src/main/java/com/example/bigquery/AuthSnippets.java create mode 100644 bigquery/cloud-client/src/test/java/com/example/bigquery/AuthSnippetsIT.java diff --git a/bigquery/cloud-client/.gitignore b/bigquery/cloud-client/.gitignore new file mode 100644 index 00000000000..9cbebe39c65 --- /dev/null +++ b/bigquery/cloud-client/.gitignore @@ -0,0 +1 @@ +service_account.json diff --git a/bigquery/cloud-client/src/main/java/com/example/bigquery/AuthSnippets.java b/bigquery/cloud-client/src/main/java/com/example/bigquery/AuthSnippets.java new file mode 100644 index 00000000000..a7a7660a3a3 --- /dev/null +++ b/bigquery/cloud-client/src/main/java/com/example/bigquery/AuthSnippets.java @@ -0,0 +1,95 @@ +/* + Copyright 2017, Google, Inc. + + 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. +*/ + +package com.example.bigquery; + +import com.google.auth.oauth2.GoogleCredentials; +import com.google.auth.oauth2.ServiceAccountCredentials; +import com.google.cloud.bigquery.BigQuery; +import com.google.cloud.bigquery.BigQueryOptions; +import com.google.cloud.bigquery.Dataset; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * Examples for authenticating to Google BigQuery. + * + *

See: https://cloud.google.com/bigquery/authentication + */ +public class AuthSnippets { + + // [START default_credentials] + public static void implicit() { + // Instantiate a client. If you don't specify credentials when constructing a client, the + // client library will look for credentials in the environment, such as the + // GOOGLE_APPLICATION_CREDENTIALS environment variable. + BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService(); + + // Use the client. + System.out.println("Datasets:"); + for (Dataset dataset : bigquery.listDatasets().iterateAll()) { + System.out.printf("%s%n", dataset.getDatasetId().getDataset()); + } + } + // [END default_credentials] + + // [START explicit_service_account] + public static void explicit() throws IOException { + // Load credentials from JSON key file. If you can't set the GOOGLE_APPLICATION_CREDENTIALS + // environment variable, you can explicitly load the credentials file to construct the + // credentials. + GoogleCredentials credentials; + File credentialsPath = new File("service_account.json"); // TODO: update to your key path. + try (FileInputStream serviceAccountStream = new FileInputStream(credentialsPath)) { + credentials = ServiceAccountCredentials.fromStream(serviceAccountStream); + } + + // Instantiate a client. + BigQuery bigquery = + BigQueryOptions.newBuilder().setCredentials(credentials).build().getService(); + + // Use the client. + System.out.println("Datasets:"); + for (Dataset dataset : bigquery.listDatasets().iterateAll()) { + System.out.printf("%s%n", dataset.getDatasetId().getDataset()); + } + } + // [END explicit_service_account] + + public static void main(String... args) throws IOException { + boolean validArgs = args.length == 1; + String sample = "explicit"; + if (validArgs) { + sample = args[0]; + if (!sample.equals("explicit") && !sample.equals("implicit")) { + validArgs = false; + } + } + + if (!validArgs) { + System.err.println("Expected auth type argument: implict|explict"); + System.exit(1); + } + + if (sample.equals("implicit")) { + implicit(); + } else { + explicit(); + } + } +} diff --git a/bigquery/cloud-client/src/test/java/com/example/bigquery/AuthSnippetsIT.java b/bigquery/cloud-client/src/test/java/com/example/bigquery/AuthSnippetsIT.java new file mode 100644 index 00000000000..546d336d43f --- /dev/null +++ b/bigquery/cloud-client/src/test/java/com/example/bigquery/AuthSnippetsIT.java @@ -0,0 +1,55 @@ +/* + Copyright 2017, Google, Inc. + + 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. +*/ + +package com.example.bigquery; + +import static com.google.common.truth.Truth.assertThat; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +/** Tests for auth samples. */ +@RunWith(JUnit4.class) +@SuppressWarnings("checkstyle:abbreviationaswordinname") +public class AuthSnippetsIT { + private ByteArrayOutputStream bout; + private PrintStream out; + + @Before + public void setUp() { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + } + + @After + public void tearDown() { + System.setOut(null); + } + + @Test + public void testAuthSnippetsImplicit() throws Exception { + AuthSnippets.main(new String[]{"implicit"}); + String got = bout.toString(); + assertThat(got).contains("Datasets:"); + } +}