Skip to content

Commit

Permalink
add tests for get_keystore
Browse files Browse the repository at this point in the history
  • Loading branch information
jbudz committed Jul 7, 2020
1 parent e6fb8e1 commit 3c36f55
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 17 deletions.
18 changes: 1 addition & 17 deletions src/cli_keystore/cli_keystore.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,16 @@
*/

import _ from 'lodash';
import { join } from 'path';
import { existsSync } from 'fs';

import Logger from '../cli_plugin/lib/logger';
import { pkg } from '../core/server/utils';
import Command from '../cli/command';
import { getConfigDirectory, getDataPath } from '../core/server/path';
import { Keystore } from '../legacy/server/keystore';

import { createCli } from './create';
import { listCli } from './list';
import { addCli } from './add';
import { removeCli } from './remove';
import { getKeystore } from './get_keystore';

const argv = process.env.kbnWorkerArgv
? JSON.parse(process.env.kbnWorkerArgv)
Expand All @@ -41,19 +38,6 @@ program
.version(pkg.version)
.description('A tool for managing settings stored in the Kibana keystore');

function getKeystore() {
const configKeystore = join(getConfigDirectory(), 'kibana.keystore');
const dataKeystore = join(getDataPath(), 'kibana.keystore');

if (existsSync(dataKeystore)) {
const logger = new Logger();
logger.log(
`kibana.keystore path at ${dataKeystore} is deprecated. Future versions will read from ${configKeystore}.`
);
}
return [configKeystore, dataKeystore].filter((p) => existsSync(p)).shift();
}

const keystore = new Keystore(getKeystore());

createCli(program, keystore);
Expand Down
40 changes: 40 additions & 0 deletions src/cli_keystore/get_keystore.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you 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.
*/

import { existsSync } from 'fs';
import { join } from 'path';

import Logger from '../cli_plugin/lib/logger';
import { getConfigDirectory, getDataPath } from '../core/server/path';

export function getKeystore() {
const configKeystore = join(getConfigDirectory(), 'kibana.keystore');
const dataKeystore = join(getDataPath(), 'kibana.keystore');
let keystorePath = null;
if (existsSync(dataKeystore)) {
const logger = new Logger();
logger.log(
`kibana.keystore located in the data folder is deprecated. Future versions will use the config folder.`
);
keystorePath = dataKeystore;
} else {
keystorePath = configKeystore;
}
return keystorePath;
}
57 changes: 57 additions & 0 deletions src/cli_keystore/get_keystore.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you 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.
*/

import { getKeystore } from './get_keystore';
import Logger from '../cli_plugin/lib/logger';
import fs from 'fs';
import sinon from 'sinon';

describe('get_keystore', () => {
const sandbox = sinon.createSandbox();

beforeEach(() => {
sandbox.stub(Logger.prototype, 'log');
});

afterEach(() => {
sandbox.restore();
});

it('uses the config directory if there is no pre-existing keystore', () => {
sandbox.stub(fs, 'existsSync').returns(false);
expect(getKeystore()).toContain('config');
expect(getKeystore()).not.toContain('data');
});

it('uses the data directory if there is a pre-existing keystore in the data directory', () => {
sandbox.stub(fs, 'existsSync').returns(true);
expect(getKeystore()).toContain('data');
expect(getKeystore()).not.toContain('config');
});

it('logs a deprecation warning if the data directory is used', () => {
sandbox.stub(fs, 'existsSync').returns(true);
getKeystore();
sandbox.assert.calledOnce(Logger.prototype.log);
sandbox.assert.calledWith(
Logger.prototype.log,
'kibana.keystore located in the data folder is deprecated. Future versions will use the config folder.'
);
});
});

0 comments on commit 3c36f55

Please sign in to comment.