test: add firewall e2e

add e2e cases for firwall/firewall-policy/firewall-rule

Change-Id: I983b9ca2729ba8e762d67d42186a481b7224e18b
This commit is contained in:
zhangjingwei 2024-05-09 09:26:17 +08:00 committed by Jingwei.Zhang
parent 5c129f2705
commit 2d8d8a76d9
7 changed files with 310 additions and 2 deletions

View File

@ -17,6 +17,7 @@
sed -i "s/- neutron::qos/# - neutron::qos/" $config_file
sed -i "s/- neutron::vpn/# - neutron::vpn/" $config_file
sed -i "s/- neutron::port-forwarding/# - neutron::port-forwarding/" $config_file
sed -i "s/- neutron::firewall/# - neutron::firewall/" $config_file
sed -i "s/- octavia/# - octavia/" $config_file
# TODO
sed -i "s#- pages/network/floatingip.spec.js#\#- pages/network/floatingip.spec.js#" $config_file

View File

@ -15,6 +15,7 @@ env:
- neutron::qos
- neutron::vpn
- neutron::port-forwarding
- neutron::firewall
- octavia
testFiles:
# network
@ -26,4 +27,7 @@ testFiles:
- pages/network/security-group.spec.js
- pages/network/vpn.spec.js
- pages/network/lb.spec.js
- pages/network/firewall.spec.js
- pages/network/firewall-policy.spec.js
- pages/network/firewall-rule.spec.js
# - pages/network/topology.spec.js

View File

@ -0,0 +1,94 @@
// Copyright 2021 99cloud
//
// Licensed 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.
import { onlyOn } from '@cypress/skip-test';
import { firewallListUrl } from '../../../support/constants';
const fwaasEnabled = (Cypress.env('extensions') || []).includes(
'neutron::firewall'
);
onlyOn(!fwaasEnabled, () => {
describe('Skip The Network Firewall Policy Page', () => {
it('successfully skip', () => {});
});
});
onlyOn(fwaasEnabled, () => {
describe('The Firewall Policy Page', () => {
const listUrl = firewallListUrl;
const uuid = Cypress._.random(0, 1e6);
const name = `e2e-firewall-policy-${uuid}`;
const newname = `${name}-1`;
const ruleName = `e2e-rule-for-fw-policy-${uuid}`;
beforeEach(() => {
cy.login(listUrl).wait(5000).clickTab('Firewall Policies', 'policies');
});
it('successfully prepair resource', () => {
cy.createFirewallRule({ name: ruleName });
});
it('successfully create', () => {
cy.clickHeaderActionButton(0)
.formInput('name', name)
.formText('description', name)
.clickModalActionSubmitButton();
});
it('successfully detail', () => {
cy.tableSearchText(name).goToDetail().checkDetailName(name);
cy.goBackToList(listUrl);
});
it('successfully insert rule', () => {
cy.tableSearchText(name)
.clickActionInMore('Insert Rule')
.formTableSelectBySearch('rule', ruleName)
.clickModalActionSubmitButton();
});
it('successfully remove rule', () => {
cy.tableSearchText(name)
.clickActionInMore('Remove Rule')
.formTableSelectBySearch('rule', ruleName)
.clickModalActionSubmitButton();
});
it('successfully edit', () => {
cy.tableSearchText(name)
.clickFirstActionButton()
.wait(5000)
.formInput('name', newname)
.formText('description', 'description')
.clickModalActionSubmitButton();
});
it('successfully delete', () => {
cy.tableSearchText(newname).clickConfirmActionInMore('Delete');
});
it('successfully disable delete', () => {
cy.tableSearchText('default ingress')
.selectFirst()
.clickHeaderActionButtonByTitle('Delete')
.checkDisableAction();
});
it('successfully delete related resources', () => {
cy.deleteAll('firewall', ruleName, 'Firewall Rules');
});
});
});

View File

@ -0,0 +1,64 @@
// Copyright 2021 99cloud
//
// Licensed 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.
import { onlyOn } from '@cypress/skip-test';
import { firewallListUrl } from '../../../support/constants';
const fwaasEnabled = (Cypress.env('extensions') || []).includes(
'neutron::firewall'
);
onlyOn(!fwaasEnabled, () => {
describe('Skip The Network Firewall Rule Page', () => {
it('successfully skip', () => {});
});
});
onlyOn(fwaasEnabled, () => {
describe('The Firewall Rule Page', () => {
const listUrl = firewallListUrl;
const name = `e2e-firewall-rule-${Cypress._.random(0, 1e6)}`;
const newname = `${name}-1`;
beforeEach(() => {
cy.login(listUrl).wait(5000).clickTab('Firewall Rules', 'rules');
});
it('successfully create', () => {
cy.clickHeaderActionButton(0)
.wait(2000)
.formInput('name', name)
.formText('description', name)
.clickFormActionSubmitButton();
});
it('successfully detail', () => {
cy.tableSearchText(name).goToDetail().checkDetailName(name);
cy.goBackToList(listUrl);
});
it('successfully edit', () => {
cy.tableSearchText(name)
.clickFirstActionButton()
.wait(5000)
.formInput('name', newname)
.formText('description', 'description')
.clickFormActionSubmitButton();
});
it('successfully delete', () => {
cy.tableSearchText(newname).clickConfirmActionButton('Delete');
});
});
});

View File

@ -0,0 +1,106 @@
// Copyright 2021 99cloud
//
// Licensed 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.
import { onlyOn } from '@cypress/skip-test';
import { firewallListUrl } from '../../../support/constants';
const fwaasEnabled = (Cypress.env('extensions') || []).includes(
'neutron::firewall'
);
onlyOn(!fwaasEnabled, () => {
describe('Skip The Network Firewall Page', () => {
it('successfully skip', () => {});
});
});
onlyOn(fwaasEnabled, () => {
describe('The Firewall Page', () => {
const listUrl = firewallListUrl;
const uuid = Cypress._.random(0, 1e6);
const name = `e2e-firewall-${uuid}`;
const newname = `${name}-1`;
const inPolicyName = `e2e-ingress-policy-for-firewall-${uuid}`;
const ePolicyName = `e2e-egress-policy-for-firewall-${uuid}`;
const networkName = `e2e-network-for-firewall-${uuid}`;
const routerName = `e2e-network-for-firewall-${uuid}`;
beforeEach(() => {
cy.login(listUrl);
});
it('successfully prepair resource', () => {
cy.createFirewallPolicy({ name: inPolicyName });
cy.createFirewallPolicy({ name: ePolicyName });
cy.createNetwork({ name: networkName });
cy.createRouter({ name: routerName, network: networkName });
});
it('successfully create', () => {
cy.clickHeaderActionButton(0)
.wait(5000)
.formInput('name', name)
.formTableSelectBySearch('ingressPolicy', inPolicyName)
.formTableSelectBySearch('egressPolicy', ePolicyName)
.formTabClick('ports', 1)
.wait(2000)
.formTableSelectBySearch('ports', networkName)
.formText('description', name)
.clickFormActionSubmitButton();
});
it('successfully detail', () => {
cy.tableSearchText(name).goToDetail().clickDetailTab('Ports', 'ports');
cy.goBackToList(listUrl);
});
it('successfully disable delete', () => {
cy.tableSearchText(name)
.selectAll()
.clickHeaderActionButtonByTitle('Delete')
.checkDisableAction();
});
it('successfully manage port', () => {
cy.tableSearchText(name)
.clickActionButtonByTitle('Manage Ports')
.formTabClick('ports', 1)
.wait(2000)
.formTableClearSelect('ports')
.clickModalActionSubmitButton();
});
it('successfully edit', () => {
cy.tableSearchText(name)
.clickFirstActionButton()
.wait(5000)
.formInput('name', newname)
.formTableClearSelect('ingressPolicy')
.formTableClearSelect('egressPolicy')
.formText('description', 'description')
.clickModalActionSubmitButton();
});
it('successfully delete', () => {
cy.tableSearchText(newname).clickConfirmActionInMore('Delete');
});
it('successfully delete related resources', () => {
cy.deleteAll('firewall', inPolicyName, 'Firewall Policies');
cy.deleteAll('firewall', ePolicyName, 'Firewall Policies');
cy.deleteRouter(routerName, networkName);
cy.deleteAll('network', networkName);
});
});
});

View File

@ -41,6 +41,7 @@ export const vpnListUrl = '/network/vpn';
export const lbListUrl = '/network/load-balancers';
export const topologyUrl = '/network/topo';
export const securityGroupListUrl = '/network/security-group';
export const firewallListUrl = '/network/firewall';
// management
export const recycleBinListUrl = '/management/recycle-bin';
@ -86,9 +87,8 @@ export default {
networkQosPolicy: policyListUrl,
fip: fipListUrl,
port: portListUrl,
// security
securityGroup: securityGroupListUrl,
firewall: firewallListUrl,
// identity
project: projectListUrl,

View File

@ -27,6 +27,7 @@ import urlMap, {
projectListUrl,
settingUrl,
flavorListUrl,
firewallListUrl,
} from './constants';
Cypress.Commands.add('createInstance', ({ name, networkName }) => {
@ -295,3 +296,41 @@ Cypress.Commands.add('deleteAll', (resourceName, name, tab) => {
cy.clickHeaderConfirmButtonByTitle('Delete');
}
});
Cypress.Commands.add(
'createFirewallRule',
({
name,
protocol = 'TCP', // TCP UDP ICMP ANY
ruleAction = 'ALLOW', // ALLOW DENY REJECT
ipVersion = 'IPv4', // IPv4 IPv6
enabled = true,
}) => {
cy.visit(firewallListUrl)
.wait(5000)
.clickTab('Firewall Rules')
.clickHeaderActionButton(0)
.wait(2000)
.formInput('name', name)
.formRadioChooseByLabel('protocol', protocol)
.formSelect('action', ruleAction)
.formRadioChooseByLabel('ip_version', ipVersion);
if (!enabled) cy.formCheckboxClick('options', 0); // Enabled: default is checked
cy.clickFormActionSubmitButton();
}
);
Cypress.Commands.add(
'createFirewallPolicy',
({ name, enableShared = false, enableAudited = false }) => {
cy.visit(firewallListUrl)
.wait(5000)
.clickTab('Firewall Policies')
.clickHeaderActionButton(0)
.wait(2000)
.formInput('name', name);
if (enableShared) cy.formCheckboxClick('options', 0); // Shared
if (enableAudited) cy.formCheckboxClick('options', 1); // Audited
cy.clickModalActionSubmitButton();
}
);