Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions frontend/packages/integration-tests-cypress/cypress.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ module.exports = defineConfig({
configFile: 'reporter-config.json',
},
fixturesFolder: 'fixtures',
defaultCommandTimeout: 30000,
defaultCommandTimeout: 40000,
retries: {
runMode: 1,
runMode: 2,
openMode: 0,
},
e2e: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { safeLoadAll } from 'js-yaml';
import { checkErrors } from '../../support';
import { isLocalDevEnvironment } from '../../views/common';
import { detailsPage } from '../../views/details-page';
import { guidedTour } from '../../views/guided-tour';
import { listPage } from '../../views/list-page';
import { modal } from '../../views/modal';
import { nav } from '../../views/nav';
Expand Down Expand Up @@ -83,6 +84,7 @@ if (!Cypress.env('OPENSHIFT_CI') || Cypress.env('PLUGIN_PULL_SPEC')) {
describe('Demo dynamic plugin test', () => {
before(() => {
cy.login();
guidedTour.close();
cy.createProjectWithCLI(PLUGIN_NAME);
cy.readFile(`${PLUGIN_PATH}/oc-manifest.yaml`).then((textManifest) => {
const yamlManifest = safeLoadAll(textManifest);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { checkErrors, testName } from '../../support';
import { projectDropdown } from '../../views/common';
import { guidedTour } from '../../views/guided-tour';
import { listPage } from '../../views/list-page';
import { nav } from '../../views/nav';

Expand Down Expand Up @@ -51,6 +52,7 @@ describe('Create image pull secret', () => {

before(() => {
cy.login();
guidedTour.close();
cy.createProjectWithCLI(testName);
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import * as _ from 'lodash';
import { DeploymentKind } from '@console/internal/module/k8s';
import { checkErrors, testName } from '../../../support';
import { guidedTour } from '../../../views/guided-tour';
import { modal } from '../../../views/modal';
import { secrets } from '../../../views/secret';

Expand Down Expand Up @@ -43,6 +44,7 @@ const deployment: DeploymentKind = {
describe('Add Secret to Workloads', () => {
before(() => {
cy.login();
guidedTour.close();
cy.createProjectWithCLI(testName);
cy.exec(`echo '${JSON.stringify(deployment)}' | kubectl create -n ${testName} -f -`);
cy.exec(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { checkErrors, testName } from '../../../support';
import { detailsPage } from '../../../views/details-page';
import { guidedTour } from '../../../views/guided-tour';
import { secrets } from '../../../views/secret';

const heading = 'Create image pull secret';

describe('Image pull secrets', () => {
before(() => {
cy.login();
guidedTour.close();
cy.createProjectWithCLI(testName);
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'cypress-file-upload';

import { checkErrors, testName } from '../../../support';
import { detailsPage } from '../../../views/details-page';
import { guidedTour } from '../../../views/guided-tour';
import { listPage } from '../../../views/list-page';
import { nav } from '../../../views/nav';
import { secrets } from '../../../views/secret';
Expand Down Expand Up @@ -33,6 +34,7 @@ describe('Create key/value secrets', () => {

before(() => {
cy.login();
guidedTour.close();
cy.createProjectWithCLI(testName);
});

Expand Down Expand Up @@ -63,9 +65,7 @@ describe('Create key/value secrets', () => {
cy.byLegacyTestID('file-input-textarea').should('not.exist');
cy.byTestID('alert-info').should('exist');
secrets.save();
cy.byTestID('loading-indicator').should('not.exist');
detailsPage.isLoaded();
detailsPage.titleShouldContain(binarySecretName);
secrets.detailsPageIsLoaded(binarySecretName);
cy.exec(
`oc get secret -n ${testName} ${binarySecretName} --template '{{.data.${secretKey}}}' | base64 -d`,
{
Expand All @@ -78,9 +78,7 @@ describe('Create key/value secrets', () => {
});
modifySecretForm(modifiedSecretKey);
secrets.save();
cy.byTestID('loading-indicator').should('not.exist');
detailsPage.isLoaded();
detailsPage.titleShouldContain(binarySecretName);
secrets.detailsPageIsLoaded(binarySecretName);
cy.exec(
`oc get secret -n ${testName} ${binarySecretName} --template '{{.data.${modifiedSecretKey}}}' | base64 -d`,
{
Expand All @@ -99,9 +97,7 @@ describe('Create key/value secrets', () => {
cy.byLegacyTestID('file-input-textarea').should('contain.text', asciiSecret);
cy.byTestID('alert-info').should('not.exist');
secrets.save();
cy.byTestID('loading-indicator').should('not.exist');
detailsPage.isLoaded();
detailsPage.titleShouldContain(asciiSecretName);
secrets.detailsPageIsLoaded(asciiSecretName);
cy.exec(
`oc get secret -n ${testName} ${asciiSecretName} --template '{{.data.${secretKey}}}' | base64 -d`,
{
Expand All @@ -119,9 +115,7 @@ describe('Create key/value secrets', () => {
cy.byLegacyTestID('file-input-textarea').should('contain.text', unicodeSecret);
cy.byTestID('alert-info').should('not.exist');
secrets.save();
cy.byTestID('loading-indicator').should('not.exist');
detailsPage.isLoaded();
detailsPage.titleShouldContain(unicodeSecretName);
secrets.detailsPageIsLoaded(unicodeSecretName);
cy.exec(
`oc get secret -n ${testName} ${unicodeSecretName} --template '{{.data.${secretKey}}}' | base64 -d`,
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { checkErrors, testName } from '../../../support';
import { detailsPage } from '../../../views/details-page';
import { guidedTour } from '../../../views/guided-tour';
import { secrets } from '../../../views/secret';

describe('Source secrets', () => {
Expand All @@ -14,15 +15,21 @@ describe('Source secrets', () => {

before(() => {
cy.login();
guidedTour.close();
cy.createProjectWithCLI(testName);
});

beforeEach(() => {
// ensure the test project is selected to avoid flakes
cy.visit(`/k8s/cluster/projects/${testName}`);
cy.visit(`/k8s/ns/${testName}/secrets/`);
secrets.clickCreateSecretDropdownButton('source');
});

afterEach(() => {
cy.exec(`oc delete secret -n ${testName} ${basicSourceSecretName} ${sshSourceSecretName}`, {
failOnNonZeroExit: false,
});
checkErrors();
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { checkErrors, testName } from '../../../support';
import { detailsPage } from '../../../views/details-page';
import { guidedTour } from '../../../views/guided-tour';
import { secrets } from '../../../views/secret';

describe('Webhook secret', () => {
Expand All @@ -8,6 +9,7 @@ describe('Webhook secret', () => {

before(() => {
cy.login();
guidedTour.close();
cy.createProjectWithCLI(testName);
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export const secrets = {
cy.byTestID('loading-indicator').should('not.exist');
detailsPage.isLoaded();
detailsPage.titleShouldContain(secretName);
cy.byTestID('secret-data').should('exist');
},
encode: (username, password) => Base64.encode(`${username}:${password}`),
enterSecretName: (secretName: string) => cy.byTestID('secret-name').type(secretName),
Expand Down
54 changes: 28 additions & 26 deletions frontend/public/components/configmap-and-secret-data.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -126,34 +126,36 @@ const SecretDataRevealButton: React.FC<SecretDataRevealButtonProps> = ({ reveal,

export const SecretData: React.FC<SecretDataProps> = ({ data }) => {
const [reveal, setReveal] = React.useState(false);
const [hasRevealableContent, setHasRevealableContent] = React.useState(false);
const { t } = useTranslation();

const dataDescriptionList = React.useMemo(() => {
return data
? Object.keys(data)
.sort()
.map((k) => {
const isBinary = ITOB.isBinary(k, Buffer.from(data[k], 'base64'));
if (!isBinary && data[k]) {
setHasRevealableContent(hasRevealableContent || !isBinary);
}
return (
<React.Fragment key={k}>
<dt i18n-not-translated="true" data-test="secret-data-term">
{k}
</dt>
<dd>
{isBinary ? (
<DownloadBinaryButton label={k} value={data[k]} />
) : (
<SecretValue value={data[k]} reveal={reveal} id={k} />
)}
</dd>
</React.Fragment>
);
})
: [];
const { items: dataDescriptionList, hasRevealableContent } = React.useMemo(() => {
if (!data) {
return { items: [], hasRevealableContent: false };
}
let revealable = false;
const items = Object.keys(data)
.sort()
.map((k) => {
const isBinary = ITOB.isBinary(k, Buffer.from(data[k], 'base64'));
if (!isBinary && data[k]) {
revealable = true;
}
return (
<React.Fragment key={k}>
<dt i18n-not-translated="true" data-test="secret-data-term">
{k}
</dt>
<dd>
{isBinary ? (
<DownloadBinaryButton label={k} value={data[k]} />
) : (
<SecretValue value={data[k]} reveal={reveal} id={k} />
)}
</dd>
</React.Fragment>
);
});
return { items, hasRevealableContent: revealable };
}, [data, reveal]);

return (
Expand Down