-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[7.x] Add Login Selector functional tests. (#66709)
# Conflicts: # x-pack/scripts/functional_tests.js
- Loading branch information
Showing
20 changed files
with
552 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
x-pack/test/functional/apps/security/trial_license/index.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License; | ||
* you may not use this file except in compliance with the Elastic License. | ||
*/ | ||
|
||
import { FtrProviderContext } from '../../../ftr_provider_context'; | ||
|
||
export default function({ loadTestFile }: FtrProviderContext) { | ||
describe('security app - trial license', function() { | ||
this.tags('ciGroup4'); | ||
|
||
loadTestFile(require.resolve('./login_selector')); | ||
}); | ||
} |
123 changes: 123 additions & 0 deletions
123
x-pack/test/functional/apps/security/trial_license/login_selector.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License; | ||
* you may not use this file except in compliance with the Elastic License. | ||
*/ | ||
|
||
import expect from '@kbn/expect'; | ||
import { parse } from 'url'; | ||
import { USERS_PATH } from '../../../../../plugins/security/public/management/management_urls'; | ||
import { FtrProviderContext } from '../../../ftr_provider_context'; | ||
|
||
export default function({ getService, getPageObjects }: FtrProviderContext) { | ||
const esArchiver = getService('esArchiver'); | ||
const testSubjects = getService('testSubjects'); | ||
const browser = getService('browser'); | ||
const PageObjects = getPageObjects(['security', 'common']); | ||
|
||
describe('Login Selector', function() { | ||
this.tags('includeFirefox'); | ||
|
||
before(async () => { | ||
await getService('esSupertest') | ||
.post('/_security/role_mapping/saml1') | ||
.send({ roles: ['superuser'], enabled: true, rules: { field: { 'realm.name': 'saml1' } } }) | ||
.expect(200); | ||
|
||
await esArchiver.load('empty_kibana'); | ||
await PageObjects.security.forceLogout(); | ||
}); | ||
|
||
after(async () => { | ||
await esArchiver.unload('empty_kibana'); | ||
}); | ||
|
||
beforeEach(async () => { | ||
await browser.get(`${PageObjects.common.getHostPort()}/login`); | ||
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible(); | ||
}); | ||
|
||
afterEach(async () => { | ||
await PageObjects.security.forceLogout(); | ||
}); | ||
|
||
it('can login with Login Form preserving original URL', async () => { | ||
await PageObjects.common.navigateToActualUrl('kibana', USERS_PATH, { | ||
ensureCurrentUrl: false, | ||
shouldLoginIfPrompted: false, | ||
}); | ||
await PageObjects.common.waitUntilUrlIncludes('next='); | ||
|
||
await PageObjects.security.loginSelector.login('basic', 'basic1'); | ||
|
||
// We need to make sure that both path and hash are respected. | ||
const currentURL = parse(await browser.getCurrentUrl()); | ||
expect(currentURL.pathname).to.eql('/app/kibana'); | ||
expect(currentURL.hash).to.eql(`#${USERS_PATH}`); | ||
}); | ||
|
||
it('can login with SSO preserving original URL', async () => { | ||
await PageObjects.common.navigateToActualUrl('kibana', USERS_PATH, { | ||
ensureCurrentUrl: false, | ||
shouldLoginIfPrompted: false, | ||
}); | ||
await PageObjects.common.waitUntilUrlIncludes('next='); | ||
|
||
await PageObjects.security.loginSelector.login('saml', 'saml1'); | ||
|
||
// We need to make sure that both path and hash are respected. | ||
const currentURL = parse(await browser.getCurrentUrl()); | ||
expect(currentURL.pathname).to.eql('/app/kibana'); | ||
expect(currentURL.hash).to.eql(`#${USERS_PATH}`); | ||
}); | ||
|
||
it('should show toast with error if SSO fails', async () => { | ||
await PageObjects.security.loginSelector.selectLoginMethod('saml', 'unknown_saml'); | ||
|
||
const toastTitle = await PageObjects.common.closeToast(); | ||
expect(toastTitle).to.eql('Could not perform login.'); | ||
|
||
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible(); | ||
}); | ||
|
||
it('can go to Login Form and return back to Selector', async () => { | ||
await PageObjects.security.loginSelector.selectLoginMethod('basic', 'basic1'); | ||
await PageObjects.security.loginSelector.verifyLoginFormIsVisible(); | ||
|
||
await testSubjects.click('loginBackToSelector'); | ||
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible(); | ||
|
||
await PageObjects.security.loginSelector.login('saml', 'saml1'); | ||
}); | ||
|
||
it('can show Login Help from both Login Selector and Login Form', async () => { | ||
// Show Login Help from Login Selector. | ||
await testSubjects.click('loginHelpLink'); | ||
await PageObjects.security.loginSelector.verifyLoginHelpIsVisible('Some-login-help.'); | ||
|
||
// Go back to Login Selector. | ||
await testSubjects.click('loginBackToLoginLink'); | ||
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible(); | ||
|
||
// Go to Login Form and show Login Help there. | ||
await PageObjects.security.loginSelector.selectLoginMethod('basic', 'basic1'); | ||
await PageObjects.security.loginSelector.verifyLoginFormIsVisible(); | ||
await testSubjects.click('loginHelpLink'); | ||
await PageObjects.security.loginSelector.verifyLoginHelpIsVisible('Some-login-help.'); | ||
|
||
// Go back to Login Form. | ||
await testSubjects.click('loginBackToLoginLink'); | ||
await PageObjects.security.loginSelector.verifyLoginFormIsVisible(); | ||
|
||
// Go back to Login Selector and show Login Help there again. | ||
await testSubjects.click('loginBackToSelector'); | ||
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible(); | ||
await testSubjects.click('loginHelpLink'); | ||
await PageObjects.security.loginSelector.verifyLoginHelpIsVisible('Some-login-help.'); | ||
|
||
// Go back to Login Selector. | ||
await testSubjects.click('loginBackToLoginLink'); | ||
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible(); | ||
}); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License; | ||
* you may not use this file except in compliance with the Elastic License. | ||
*/ | ||
|
||
/* eslint-disable import/no-default-export */ | ||
|
||
import { resolve } from 'path'; | ||
import { FtrConfigProviderContext } from '@kbn/test/types/ftr'; | ||
import { services } from './services'; | ||
import { pageObjects } from './page_objects'; | ||
|
||
// the default export of config files must be a config provider | ||
// that returns an object with the projects config values | ||
export default async function({ readConfigFile }: FtrConfigProviderContext) { | ||
const kibanaCommonConfig = await readConfigFile( | ||
require.resolve('../../../test/common/config.js') | ||
); | ||
const kibanaFunctionalConfig = await readConfigFile( | ||
require.resolve('../../../test/functional/config.js') | ||
); | ||
|
||
const kibanaPort = kibanaFunctionalConfig.get('servers.kibana.port'); | ||
const idpPath = resolve(__dirname, '../saml_api_integration/fixtures/saml_provider/metadata.xml'); | ||
const samlIdPPlugin = resolve(__dirname, '../saml_api_integration/fixtures/saml_provider'); | ||
|
||
return { | ||
testFiles: [resolve(__dirname, './apps/security/trial_license')], | ||
|
||
services, | ||
pageObjects, | ||
|
||
servers: kibanaFunctionalConfig.get('servers'), | ||
|
||
esTestCluster: { | ||
license: 'trial', | ||
from: 'snapshot', | ||
serverArgs: [ | ||
'xpack.security.authc.token.enabled=true', | ||
'xpack.security.authc.realms.saml.saml1.order=0', | ||
`xpack.security.authc.realms.saml.saml1.idp.metadata.path=${idpPath}`, | ||
'xpack.security.authc.realms.saml.saml1.idp.entity_id=http://www.elastic.co/saml1', | ||
`xpack.security.authc.realms.saml.saml1.sp.entity_id=http://localhost:${kibanaPort}`, | ||
`xpack.security.authc.realms.saml.saml1.sp.logout=http://localhost:${kibanaPort}/logout`, | ||
`xpack.security.authc.realms.saml.saml1.sp.acs=http://localhost:${kibanaPort}/api/security/saml/callback`, | ||
'xpack.security.authc.realms.saml.saml1.attributes.principal=urn:oid:0.0.7', | ||
], | ||
}, | ||
|
||
kbnTestServer: { | ||
...kibanaCommonConfig.get('kbnTestServer'), | ||
serverArgs: [ | ||
...kibanaCommonConfig.get('kbnTestServer.serverArgs'), | ||
`--plugin-path=${samlIdPPlugin}`, | ||
'--server.uuid=5b2de169-2785-441b-ae8c-186a1936b17d', | ||
'--xpack.security.encryptionKey="wuGNaIhoMpk5sO4UBxgr3NyW1sFcLgIf"', | ||
`--xpack.security.loginHelp="Some-login-help."`, | ||
'--xpack.security.authc.providers.basic.basic1.order=0', | ||
'--xpack.security.authc.providers.saml.saml1.order=1', | ||
'--xpack.security.authc.providers.saml.saml1.realm=saml1', | ||
'--xpack.security.authc.providers.saml.saml1.description="Log-in-with-SAML"', | ||
'--xpack.security.authc.providers.saml.saml1.icon=logoKibana', | ||
'--xpack.security.authc.providers.saml.unknown_saml.order=2', | ||
'--xpack.security.authc.providers.saml.unknown_saml.realm=unknown_realm', | ||
'--xpack.security.authc.providers.saml.unknown_saml.description="Do-not-log-in-with-THIS-SAML"', | ||
'--xpack.security.authc.providers.saml.unknown_saml.icon=logoAWS', | ||
], | ||
}, | ||
uiSettings: { | ||
defaults: { | ||
'accessibility:disableAnimations': true, | ||
'dateFormat:tz': 'UTC', | ||
}, | ||
}, | ||
apps: kibanaFunctionalConfig.get('apps'), | ||
esArchiver: { directory: resolve(__dirname, 'es_archives') }, | ||
screenshots: { directory: resolve(__dirname, 'screenshots') }, | ||
|
||
junit: { | ||
reportName: 'Chrome X-Pack UI Functional Tests', | ||
}, | ||
}; | ||
} |
Oops, something went wrong.