mirror of https://github.com/buster-so/buster.git
bigquery bugfixes
This commit is contained in:
parent
a7e0c71acb
commit
6ad4654200
|
@ -81,6 +81,32 @@ describe('BigQueryAdapter', () => {
|
||||||
await expect(adapter.initialize(credentials)).resolves.not.toThrow();
|
await expect(adapter.initialize(credentials)).resolves.not.toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should handle service account key as parsed object', async () => {
|
||||||
|
const serviceAccountObject = {
|
||||||
|
type: 'service_account',
|
||||||
|
project_id: 'test-project',
|
||||||
|
private_key_id: 'key123',
|
||||||
|
private_key: '-----BEGIN PRIVATE KEY-----\ntest\n-----END PRIVATE KEY-----',
|
||||||
|
client_email: 'test@test-project.iam.gserviceaccount.com',
|
||||||
|
};
|
||||||
|
|
||||||
|
const credentials: BigQueryCredentials = {
|
||||||
|
type: DataSourceType.BigQuery,
|
||||||
|
project_id: 'test-project',
|
||||||
|
service_account_key: serviceAccountObject,
|
||||||
|
};
|
||||||
|
|
||||||
|
await adapter.initialize(credentials);
|
||||||
|
|
||||||
|
const { BigQuery } = await import('@google-cloud/bigquery');
|
||||||
|
expect(BigQuery).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
projectId: 'test-project',
|
||||||
|
credentials: serviceAccountObject,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('should allow initialization without credentials (uses ADC)', async () => {
|
it('should allow initialization without credentials (uses ADC)', async () => {
|
||||||
const credentials: BigQueryCredentials = {
|
const credentials: BigQueryCredentials = {
|
||||||
type: DataSourceType.BigQuery,
|
type: DataSourceType.BigQuery,
|
||||||
|
|
|
@ -31,13 +31,18 @@ export class BigQueryAdapter extends BaseAdapter {
|
||||||
|
|
||||||
// Handle service account authentication
|
// Handle service account authentication
|
||||||
if (bigqueryCredentials.service_account_key) {
|
if (bigqueryCredentials.service_account_key) {
|
||||||
try {
|
// Check if it's already an object
|
||||||
// Try to parse as JSON string
|
if (typeof bigqueryCredentials.service_account_key === 'object') {
|
||||||
const keyData = JSON.parse(bigqueryCredentials.service_account_key);
|
options.credentials = bigqueryCredentials.service_account_key;
|
||||||
options.credentials = keyData;
|
} else if (typeof bigqueryCredentials.service_account_key === 'string') {
|
||||||
} catch {
|
try {
|
||||||
// If parsing fails, treat as file path
|
// Try to parse as JSON string
|
||||||
options.keyFilename = bigqueryCredentials.service_account_key;
|
const keyData = JSON.parse(bigqueryCredentials.service_account_key);
|
||||||
|
options.credentials = keyData;
|
||||||
|
} catch {
|
||||||
|
// If parsing fails, treat as file path
|
||||||
|
options.keyFilename = bigqueryCredentials.service_account_key;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (bigqueryCredentials.key_file_path) {
|
} else if (bigqueryCredentials.key_file_path) {
|
||||||
options.keyFilename = bigqueryCredentials.key_file_path;
|
options.keyFilename = bigqueryCredentials.key_file_path;
|
||||||
|
|
|
@ -53,8 +53,8 @@ export interface BigQueryCredentials {
|
||||||
/** Google Cloud project ID */
|
/** Google Cloud project ID */
|
||||||
project_id: string;
|
project_id: string;
|
||||||
|
|
||||||
/** Service account key JSON (as string) or path to key file */
|
/** Service account key - can be JSON string, parsed object, or path to key file */
|
||||||
service_account_key?: string;
|
service_account_key?: string | Record<string, unknown>;
|
||||||
|
|
||||||
/** Path to service account key file */
|
/** Path to service account key file */
|
||||||
key_file_path?: string;
|
key_file_path?: string;
|
||||||
|
|
Loading…
Reference in New Issue