-
Notifications
You must be signed in to change notification settings - Fork 8.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Login Selector functional tests. #65705
Merged
azasypkin
merged 4 commits into
elastic:master
from
azasypkin:issue-xxx-login-selector-tests
May 15, 2020
Merged
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
92e8d74
Add Login Selector functional tests.
azasypkin 892fbba
Merge branch 'master' into issue-xxx-login-selector-tests
azasypkin e8766ee
Review#1: make sure we are preserving original URL, remove legacy stu…
azasypkin 73cc2b9
Review#1: return code that closes browser native alerts when we log u…
azasypkin File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👏 👏 👏