adds enhanced checks for hcp link status timestamp and error message and uses HCP abbreviation in messaging (#17235)
This commit is contained in:
parent
f2adbb3e47
commit
a89586a3cb
|
@ -36,23 +36,25 @@ export default class LinkStatus extends Component {
|
|||
|
||||
get message() {
|
||||
if (this.args.status) {
|
||||
const error = this.args.status.split('error:')[1];
|
||||
const time = `[${this.timestamp}]`;
|
||||
const error = this.args.status.split('error:')[1] || '';
|
||||
const timestamp = this.timestamp ? ` [${this.timestamp}]` : '';
|
||||
const sinceTimestamp = timestamp ? ` since${timestamp}` : '';
|
||||
if (this.state === 'disconnected') {
|
||||
// if generally disconnected hide the banner
|
||||
return !error || error.includes('UNKNOWN')
|
||||
? null
|
||||
: `Vault has been disconnected from the Hashicorp Cloud Platform since ${time}. Error: ${error}`;
|
||||
: `Vault has been disconnected from HCP${sinceTimestamp}. Error: ${error}`;
|
||||
} else if (this.state === 'connecting') {
|
||||
if (error.includes('connection refused')) {
|
||||
return `Vault has been trying to connect to the Hashicorp Cloud Platform since ${time}, but the Scada provider is down. Vault will try again soon.`;
|
||||
return `Vault has been trying to connect to HCP${sinceTimestamp}, but HCP is not reachable. Vault will try again soon.`;
|
||||
} else if (error.includes('principal does not have permission to register as provider')) {
|
||||
return `Vault tried connecting to the Hashicorp Cloud Platform, but the Resource ID is invalid. Check your resource ID. ${time}`;
|
||||
return `Vault tried connecting to HCP, but the Resource ID is invalid. Check your resource ID.${timestamp}`;
|
||||
} else if (error.includes('cannot fetch token: 401 Unauthorized')) {
|
||||
return `Vault tried connecting to the Hashicorp Cloud Platform, but the authorization information is wrong. Update it and try again. ${time}`;
|
||||
return `Vault tried connecting to HCP, but the authorization information is wrong. Update it and try again.${timestamp}`;
|
||||
} else {
|
||||
// catch all for any unknown errors
|
||||
return `Vault has been trying to connect to the Hashicorp Cloud Platform since ${time}. Vault will try again soon. Error: ${error}`;
|
||||
// catch all for any unknown errors or missing error
|
||||
const errorMessage = error ? ` Error: ${error}` : '';
|
||||
return `Vault has been trying to connect to HCP${sinceTimestamp}. Vault will try again soon.${errorMessage}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +66,7 @@ export default class LinkStatus extends Component {
|
|||
if (!this.version.isEnterprise || !this.args.status) {
|
||||
return false;
|
||||
}
|
||||
if (this.state === 'disconnected' && !this.message) {
|
||||
if (this.state !== 'connected' && !this.message) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
<Icon @name="info" />
|
||||
<p data-test-link-status>
|
||||
{{#if (eq this.state "connected")}}
|
||||
This self-managed Vault is linked to the
|
||||
This self-managed Vault is linked to
|
||||
<a href="https://portal.cloud.hashicorp.com/sign-in" target="_blank" rel="noopener noreferrer">
|
||||
HashiCorp Cloud Platform.
|
||||
HCP.
|
||||
</a>
|
||||
{{else}}
|
||||
{{this.message}}
|
||||
|
|
|
@ -17,16 +17,27 @@ module('Integration | Component | link-status', function (hooks) {
|
|||
this.statuses = statuses;
|
||||
});
|
||||
|
||||
test('it does not render banner or error when status is not present', async function (assert) {
|
||||
await render(hbs`<LinkStatus @status={{undefined}} />`);
|
||||
|
||||
assert.dom('.navbar-status').doesNotExist('Banner is hidden for disconnected state');
|
||||
});
|
||||
|
||||
test('it does not render banner if not enterprise version', async function (assert) {
|
||||
this.owner.lookup('service:version').set('isEnterprise', false);
|
||||
|
||||
await render(hbs`<LinkStatus @status={{get this.statuses 0}} />`);
|
||||
|
||||
assert.dom('.navbar-status').doesNotExist('Banner is hidden for disconnected state');
|
||||
});
|
||||
|
||||
test('it renders connected status', async function (assert) {
|
||||
await render(hbs`<LinkStatus @status={{get this.statuses 0}} />`);
|
||||
|
||||
assert.dom('.navbar-status').hasClass('connected', 'Correct class renders for connected state');
|
||||
assert
|
||||
.dom('[data-test-link-status]')
|
||||
.hasText(
|
||||
'This self-managed Vault is linked to the HashiCorp Cloud Platform.',
|
||||
'Copy renders for connected state'
|
||||
);
|
||||
.hasText('This self-managed Vault is linked to HCP.', 'Copy renders for connected state');
|
||||
assert
|
||||
.dom('[data-test-link-status] a')
|
||||
.hasAttribute('href', 'https://portal.cloud.hashicorp.com/sign-in', 'HCP sign in link renders');
|
||||
|
@ -45,7 +56,7 @@ module('Integration | Component | link-status', function (hooks) {
|
|||
assert
|
||||
.dom('[data-test-link-status]')
|
||||
.hasText(
|
||||
`Vault has been disconnected from the Hashicorp Cloud Platform since ${timestamp}. Error: some other error other than unknown`,
|
||||
`Vault has been disconnected from HCP since ${timestamp}. Error: some other error other than unknown`,
|
||||
'Copy renders for disconnected error state'
|
||||
);
|
||||
});
|
||||
|
@ -59,7 +70,7 @@ module('Integration | Component | link-status', function (hooks) {
|
|||
assert
|
||||
.dom('[data-test-link-status]')
|
||||
.hasText(
|
||||
`Vault has been trying to connect to the Hashicorp Cloud Platform since ${timestamp}, but the Scada provider is down. Vault will try again soon.`,
|
||||
`Vault has been trying to connect to HCP since ${timestamp}, but HCP is not reachable. Vault will try again soon.`,
|
||||
'Copy renders for connection refused error state'
|
||||
);
|
||||
});
|
||||
|
@ -71,7 +82,7 @@ module('Integration | Component | link-status', function (hooks) {
|
|||
assert
|
||||
.dom('[data-test-link-status]')
|
||||
.hasText(
|
||||
`Vault tried connecting to the Hashicorp Cloud Platform, but the Resource ID is invalid. Check your resource ID. ${timestamp}`,
|
||||
`Vault tried connecting to HCP, but the Resource ID is invalid. Check your resource ID. ${timestamp}`,
|
||||
'Copy renders for resource id error state'
|
||||
);
|
||||
});
|
||||
|
@ -83,7 +94,7 @@ module('Integration | Component | link-status', function (hooks) {
|
|||
assert
|
||||
.dom('[data-test-link-status]')
|
||||
.hasText(
|
||||
`Vault tried connecting to the Hashicorp Cloud Platform, but the authorization information is wrong. Update it and try again. ${timestamp}`,
|
||||
`Vault tried connecting to HCP, but the authorization information is wrong. Update it and try again. ${timestamp}`,
|
||||
'Copy renders for unauthorized error state'
|
||||
);
|
||||
});
|
||||
|
@ -95,7 +106,21 @@ module('Integration | Component | link-status', function (hooks) {
|
|||
assert
|
||||
.dom('[data-test-link-status]')
|
||||
.hasText(
|
||||
`Vault has been trying to connect to the Hashicorp Cloud Platform since ${timestamp}. Vault will try again soon. Error: connection error we are unaware of`,
|
||||
`Vault has been trying to connect to HCP since ${timestamp}. Vault will try again soon. Error: connection error we are unaware of`,
|
||||
'Copy renders for unknown error state'
|
||||
);
|
||||
});
|
||||
|
||||
// connecting state should always be returned with timestamp and error
|
||||
// this case came up in manual testing and should be fixed on the backend but additional checks were added just in case
|
||||
test('it renders generic message for connecting state with no timestamp or error', async function (assert) {
|
||||
await render(hbs`<LinkStatus @status="connecting" />`);
|
||||
|
||||
assert.dom('.navbar-status').hasClass('warning', 'Correct class renders for unknown error state');
|
||||
assert
|
||||
.dom('[data-test-link-status]')
|
||||
.hasText(
|
||||
`Vault has been trying to connect to HCP. Vault will try again soon.`,
|
||||
'Copy renders for unknown error state'
|
||||
);
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue