blob: eda0f13100e5399e61ea37560258d57e391c351c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.
*/
require('mixins/common/kdc_credentials_controller_mixin');
var App = require('app');
var credentialsUtils = require('utils/credentials');
var mixedObject;
describe('App.KDCCredentialsControllerMixin', function() {
beforeEach(function() {
mixedObject = Em.Object.create(App.KDCCredentialsControllerMixin);
});
afterEach(function() {
mixedObject.destroy();
});
describe('#initializeKDCStoreProperties', function() {
[
{
isStorePersisted: true,
e: {
isEditable: true,
hintMessage: Em.I18n.t('admin.kerberos.credentials.store.hint.supported')
},
message: 'Persistent store available, config should be editable, and appropriate hint shown'
},
{
isStorePersisted: false,
e: {
isEditable: false,
hintMessage: Em.I18n.t('admin.kerberos.credentials.store.hint.not.supported')
},
message: 'Only temporary store available, config should be disabled, and appropriate hint shown'
}
].forEach(function(test) {
describe(test.message, function() {
var config;
beforeEach(function () {
var configs = [];
mixedObject.reopen({
isStorePersisted: function() {
return test.isStorePersisted;
}.property()
});
mixedObject.initializeKDCStoreProperties(configs);
config = configs.findProperty('name', 'persist_credentials');
});
Object.keys(test.e).forEach(function(key) {
it(key, function () {
assert.equal(Em.get(config, key), test.e[key], 'validate attribute: ' + key);
});
});
});
});
});
describe('#updateKDCStoreProperties', function() {
[
{
isStorePersisted: true,
e: {
isEditable: true,
hintMessage: Em.I18n.t('admin.kerberos.credentials.store.hint.supported')
},
message: 'Persistent store available, config should be editable, and appropriate hint shown',
configs: [
Em.Object.create({
name: 'persist_credentials',
isEditable: false,
hintMessage: ''
})
]
},
{
isStorePersisted: false,
e: {
isEditable: false,
hintMessage: Em.I18n.t('admin.kerberos.credentials.store.hint.not.supported')
},
message: 'Only temporary store available, config should be disabled, and appropriate hint shown',
configs: [
Em.Object.create({
name: 'persist_credentials',
isEditable: true,
hintMessage: ''
})
]
}
].forEach(function(test) {
describe(test.message, function() {
var config;
beforeEach(function () {
var configs = test.configs;
mixedObject.reopen({
isStorePersisted: function() {
return test.isStorePersisted;
}.property()
});
mixedObject.updateKDCStoreProperties(configs);
config = configs.findProperty('name', 'persist_credentials');
});
Object.keys(test.e).forEach(function(key) {
it(key, function () {
assert.equal(Em.get(config, key), test.e[key], 'validate attribute: ' + key);
});
});
});
});
});
describe('#createKDCCredentials', function() {
function createConfig (name, value) {
return App.ServiceConfigProperty.create({
name: name,
value: value
});
}
function resolveWith (data) {
return $.Deferred().resolve(data).promise();
}
function rejectWith (data) {
return $.Deferred().reject(data).promise();
}
beforeEach(function () {
sinon.stub(App, 'get').withArgs('clusterName').returns('testName');
sinon.stub(credentialsUtils, 'createCredentials', function() {
return resolveWith();
});
sinon.stub(credentialsUtils, 'updateCredentials', function() {
return resolveWith();
});
mixedObject.reopen({
isStorePersisted: true
});
});
afterEach(function () {
App.get.restore();
credentialsUtils.createCredentials.restore();
credentialsUtils.updateCredentials.restore();
});
[
{
configs: [
createConfig('admin_password', 'admin'),
createConfig('admin_principal', 'admin/admin'),
createConfig('persist_credentials', 'true')
],
credentialsExists: false,
createCredentialFnCalled: true,
updateCredentialFnCalled: false,
e: [
'testName',
'kdc.admin.credential',
{
type: 'persisted',
key: 'admin',
principal: 'admin/admin'
}
],
message: 'Save Admin credentials checkbox checked, credentials already stored and should be updated as `persisted`'
},
{
configs: [
createConfig('admin_password', 'admin'),
createConfig('admin_principal', 'admin/admin'),
createConfig('persist_credentials', 'true')
],
credentialsExists: true,
createCredentialFnCalled: false,
updateCredentialFnCalled: true,
e: [
'testName',
'kdc.admin.credential',
{
type: 'persisted',
key: 'admin',
principal: 'admin/admin'
}
],
message: 'Save Admin credentials checkbox checked, no stored credentials, should be created as `persisted`'
},
{
configs: [
createConfig('admin_password', 'admin'),
createConfig('admin_principal', 'admin/admin'),
createConfig('persist_credentials', 'false')
],
credentialsExists: true,
createCredentialFnCalled: false,
updateCredentialFnCalled: true,
e: [
'testName',
'kdc.admin.credential',
{
type: 'temporary',
key: 'admin',
principal: 'admin/admin'
}
],
message: 'Save Admin credentials checkbox unchecked, credentials already stored and should be updated as `temporary`'
},
{
configs: [
createConfig('admin_password', 'admin'),
createConfig('admin_principal', 'admin/admin'),
createConfig('persist_credentials', 'false')
],
credentialsExists: false,
createCredentialFnCalled: true,
updateCredentialFnCalled: false,
e: [
'testName',
'kdc.admin.credential',
{
type: 'temporary',
key: 'admin',
principal: 'admin/admin'
}
],
message: 'Save Admin credentials checkbox unchecked, credentials already stored and should be updated as `temporary`'
}
].forEach(function(test) {
describe(test.message, function() {
beforeEach(function () {
sinon.stub(credentialsUtils, 'getCredential', function() {
return test.credentialsExists ? resolveWith() : rejectWith();
});
mixedObject.createKDCCredentials(test.configs);
});
afterEach(function () {
credentialsUtils.getCredential.restore();
});
it('credentialsUtils#createCredentials called', function () {
expect(credentialsUtils.createCredentials.calledOnce).to.equal(test.createCredentialFnCalled);
});
if (test.createCredentialFnCalled) {
it('credentialsUtils#createCredentials called with correct arguments', function () {
expect(credentialsUtils.createCredentials.args[0]).to.eql(test.e);
});
}
it('credentialUtils#updateCredentials called', function () {
expect(credentialsUtils.updateCredentials.calledOnce).to.equal(test.updateCredentialFnCalled);
});
if (test.updateCredentialFnCalled) {
it('credentialUtils#updateCredentials called with correct arguments', function () {
expect(credentialsUtils.updateCredentials.args[0]).to.eql(test.e);
});
}
});
});
});
});