1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 describe('Virtual machine login manage tests', function() {
9 const vmHost = `vm-${Math.floor(999999 * Math.random())}.host`;
12 // Only set up common users once. These aren't set up as aliases because
13 // aliases are cleaned up after every test. Also it doesn't make sense
14 // to set the same users on beforeEach() over and over again, so we
15 // separate a little from Cypress' 'Best Practices' here.
16 cy.getUser('admin', 'VMAdmin', 'User', true, true)
17 .as('adminUser').then(function() {
18 adminUser = this.adminUser;
21 cy.getUser('user', 'VMActive', 'User', false, true)
22 .as('activeUser').then(function() {
23 activeUser = this.activeUser;
28 it('adds and removes vm logins', function() {
29 cy.loginAs(adminUser);
30 cy.createVirtualMachine(adminUser.token, {hostname: vmHost});
32 // Navigate to VM admin
33 cy.get('header button[title="Admin Panel"]').click();
34 cy.get('#admin-menu').contains('Virtual Machines').click();
36 // Add login permission to admin
37 cy.get('[data-cy=vm-admin-table]')
41 cy.get('button[title="Add Login Permission"]').click();
43 cy.get('[data-cy=form-dialog]')
44 .should('contain', 'Add login permission')
47 .contains('Search for user')
50 cy.get('input').type('VMAdmin');
53 cy.get('[role=tooltip]').click();
54 cy.get('[data-cy=form-dialog]')
55 .should('contain', 'Add login permission')
58 .contains('Add groups')
61 cy.get('input').type('docker sudo{enter}');
64 cy.get('[data-cy=form-dialog]').within(() => {
65 cy.get('[data-cy=form-submit-btn]').click();
68 cy.get('[data-cy=vm-admin-table]')
72 cy.get('td').contains('admin');
75 // Add login permission to activeUser
76 cy.get('[data-cy=vm-admin-table]')
80 cy.get('button[title="Add Login Permission"]').click();
82 cy.get('[data-cy=form-dialog]')
83 .should('contain', 'Add login permission')
86 .contains('Search for user')
89 cy.get('input').type('VMActive user');
92 cy.get('[role=tooltip]').click();
93 cy.get('[data-cy=form-dialog]').within(() => {
94 cy.get('[data-cy=form-submit-btn]').click();
97 cy.get('[data-cy=vm-admin-table]')
101 cy.get('td').contains('user');
104 // Check admin's vm page for login
105 cy.get('header button[title="Account Management"]').click();
106 cy.get('#account-menu').contains('Virtual Machines').click();
108 cy.get('[data-cy=vm-user-table]')
112 cy.get('td').contains('admin');
113 cy.get('td').contains('docker');
114 cy.get('td').contains('sudo');
115 cy.get('td').contains('ssh admin@' + vmHost);
118 // Check activeUser's vm page for login
119 cy.loginAs(activeUser);
120 cy.get('header button[title="Account Management"]').click();
121 cy.get('#account-menu').contains('Virtual Machines').click();
123 cy.get('[data-cy=vm-user-table]')
127 cy.get('td').contains('user');
128 cy.get('td').should('not.contain', 'docker');
129 cy.get('td').should('not.contain', 'sudo');
130 cy.get('td').contains('ssh user@' + vmHost);
133 // Edit login permissions
134 cy.loginAs(adminUser);
135 cy.get('header button[title="Admin Panel"]').click();
136 cy.get('#admin-menu').contains('Virtual Machines').click();
138 cy.get('[data-cy=vm-admin-table]')
139 .contains('admin'); // Wait for page to finish
141 cy.get('[data-cy=vm-admin-table]')
147 cy.get('[data-cy=form-dialog]')
148 .should('contain', 'Update login permission')
151 .contains('Add groups')
156 cy.get('@groupInput').within(() => {
157 cy.get('div[role=button]').contains('sudo').parent().find('svg').click();
158 cy.get('div[role=button]').contains('docker').parent().find('svg').click();
161 cy.get('[data-cy=form-dialog]').within(() => {
162 cy.get('[data-cy=form-submit-btn]').click();
165 // Wait for page to finish loading
166 cy.get('[data-cy=vm-admin-table]')
170 cy.get('div[role=button]')
176 cy.get('[data-cy=vm-admin-table]')
182 cy.get('[data-cy=form-dialog]')
183 .should('contain', 'Update login permission')
186 .contains('Add groups')
189 cy.get('input').type('docker{enter}');
193 cy.get('[data-cy=form-dialog]').within(() => {
194 cy.get('[data-cy=form-submit-btn]').click();
197 // Verify new login permissions
198 // Check admin's vm page for login
199 cy.get('header button[title="Account Management"]').click();
200 cy.get('#account-menu').contains('Virtual Machines').click();
202 cy.get('[data-cy=vm-user-table]')
206 cy.get('td').contains('admin');
207 cy.get('td').should('not.contain', 'docker');
208 cy.get('td').should('not.contain', 'sudo');
209 cy.get('td').contains('ssh admin@' + vmHost);
212 // Verify new login permissions
213 // Check activeUser's vm page for login
214 cy.loginAs(activeUser);
215 cy.get('header button[title="Account Management"]').click();
216 cy.get('#account-menu').contains('Virtual Machines').click();
218 cy.get('[data-cy=vm-user-table]')
222 cy.get('td').contains('user');
223 cy.get('td').contains('docker');
224 cy.get('td').should('not.contain', 'sudo');
225 cy.get('td').contains('ssh user@' + vmHost);
228 // Remove login permissions
229 cy.loginAs(adminUser);
230 cy.get('header button[title="Admin Panel"]').click();
231 cy.get('#admin-menu').contains('Virtual Machines').click();
233 cy.get('[data-cy=vm-admin-table]')
234 .contains('user'); // Wait for page to finish
236 cy.get('[data-cy=vm-admin-table]')
241 .parents('[role=button]')
244 cy.get('@removeButton').click();
245 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
249 cy.get('div[role=button]').should('not.contain', 'user');
250 cy.get('div[role=button]').should('have.length', 1)
254 .find('div[role=button]')
256 .parents('[role=button]')
259 cy.get('@removeButton').click();
260 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
262 cy.get('[data-cy=vm-admin-table]')
266 cy.get('div[role=button]').should('not.contain', 'admin');
269 // Check admin's vm page for login
270 cy.get('header button[title="Account Management"]').click();
271 cy.get('#account-menu').contains('Virtual Machines').click();
273 cy.get('[data-cy=vm-user-panel]')
274 .should('not.contain', vmHost);
276 // Check activeUser's vm page for login
277 cy.loginAs(activeUser);
278 cy.get('header button[title="Account Management"]').click();
279 cy.get('#account-menu').contains('Virtual Machines').click();
281 cy.get('[data-cy=vm-user-panel]')
282 .should('not.contain', vmHost);