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]').as('add-login-dialog')
55 .should('contain', 'Add login permission')
58 .contains('Add groups')
61 cy.get('input').type('docker ');
62 // Veryfy submit enabled (form has changed)
63 cy.get('@add-login-dialog').within(() => {
64 cy.get('[data-cy=form-submit-btn]').should('be.enabled');
66 cy.get('input').type('sudo');
67 // Veryfy submit disabled (partial input in chips)
68 cy.get('@add-login-dialog').within(() => {
69 cy.get('[data-cy=form-submit-btn]').should('be.disabled');
71 cy.get('input').type('{enter}');
74 cy.get('[data-cy=form-dialog]').within(() => {
75 cy.get('[data-cy=form-submit-btn]').click();
77 cy.get('[data-cy=snackbar]').contains('Permission updated');
78 cy.get('[data-cy=vm-admin-table]')
82 cy.get('td').contains('admin');
85 // Add login permission to activeUser
86 cy.get('[data-cy=vm-admin-table]')
90 cy.get('button[title="Add Login Permission"]').click();
92 cy.get('[data-cy=form-dialog]')
93 .should('contain', 'Add login permission')
96 .contains('Search for user')
99 cy.get('input').type('VMActive user');
102 cy.get('[role=tooltip]').click();
103 cy.get('[data-cy=form-dialog]').within(() => {
104 cy.get('[data-cy=form-submit-btn]').click();
106 cy.get('[data-cy=snackbar]').contains('Permission updated');
107 cy.get('[data-cy=vm-admin-table]')
111 cy.get('td').contains('user');
114 // Check admin's vm page for login
115 cy.get('header button[title="Account Management"]').click();
116 cy.get('#account-menu').contains('Virtual Machines').click();
118 cy.get('[data-cy=vm-user-table]')
122 cy.get('td').contains('admin');
123 cy.get('td').contains('docker');
124 cy.get('td').contains('sudo');
125 cy.get('td').contains('ssh admin@' + vmHost);
128 // Check activeUser's vm page for login
129 cy.loginAs(activeUser);
130 cy.get('header button[title="Account Management"]').click();
131 cy.get('#account-menu').contains('Virtual Machines').click();
133 cy.get('[data-cy=vm-user-table]')
137 cy.get('td').contains('user');
138 cy.get('td').should('not.contain', 'docker');
139 cy.get('td').should('not.contain', 'sudo');
140 cy.get('td').contains('ssh user@' + vmHost);
143 // Edit login permissions
144 cy.loginAs(adminUser);
145 cy.get('header button[title="Admin Panel"]').click();
146 cy.get('#admin-menu').contains('Virtual Machines').click();
148 cy.get('[data-cy=vm-admin-table]')
149 .contains('admin'); // Wait for page to finish
151 cy.get('[data-cy=vm-admin-table]')
157 cy.get('[data-cy=form-dialog]')
158 .should('contain', 'Update login permission')
161 .contains('Add groups')
166 cy.get('@groupInput').within(() => {
167 cy.get('div[role=button]').contains('sudo').parent().find('svg').click();
168 cy.get('div[role=button]').contains('docker').parent().find('svg').click();
171 cy.get('[data-cy=form-dialog]').within(() => {
172 cy.get('[data-cy=form-submit-btn]').click();
175 // Wait for page to finish loading
176 cy.get('[data-cy=snackbar]').contains('Permission updated');
177 cy.get('[data-cy=vm-admin-table]')
181 cy.get('div[role=button]')
187 cy.get('[data-cy=vm-admin-table]')
193 cy.get('[data-cy=form-dialog]')
194 .should('contain', 'Update login permission')
197 .contains('Add groups')
200 cy.get('input').type('docker{enter}');
204 cy.get('[data-cy=form-dialog]').within(() => {
205 cy.get('[data-cy=form-submit-btn]').click();
207 cy.get('[data-cy=snackbar]').contains('Permission updated');
209 // Verify new login permissions
210 // Check admin's vm page for login
211 cy.get('header button[title="Account Management"]').click();
212 cy.get('#account-menu').contains('Virtual Machines').click();
214 cy.get('[data-cy=vm-user-table]')
218 cy.get('td').contains('admin');
219 cy.get('td').should('not.contain', 'docker');
220 cy.get('td').should('not.contain', 'sudo');
221 cy.get('td').contains('ssh admin@' + vmHost);
224 // Verify new login permissions
225 // Check activeUser's vm page for login
226 cy.loginAs(activeUser);
227 cy.get('header button[title="Account Management"]').click();
228 cy.get('#account-menu').contains('Virtual Machines').click();
230 cy.get('[data-cy=vm-user-table]')
234 cy.get('td').contains('user');
235 cy.get('td').contains('docker');
236 cy.get('td').should('not.contain', 'sudo');
237 cy.get('td').contains('ssh user@' + vmHost);
240 // Remove login permissions
241 cy.loginAs(adminUser);
242 cy.get('header button[title="Admin Panel"]').click();
243 cy.get('#admin-menu').contains('Virtual Machines').click();
245 cy.get('[data-cy=vm-admin-table]')
246 .contains('user'); // Wait for page to finish
248 cy.get('[data-cy=vm-admin-table]')
253 .parents('[role=button]')
256 cy.get('@removeButton').click();
257 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
261 cy.get('div[role=button]').should('not.contain', 'user');
262 cy.get('div[role=button]').should('have.length', 1)
266 .find('div[role=button]')
268 .parents('[role=button]')
271 cy.get('@removeButton').click();
272 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
274 cy.get('[data-cy=vm-admin-table]')
278 cy.get('div[role=button]').should('not.contain', 'admin');
281 // Check admin's vm page for login
282 cy.get('header button[title="Account Management"]').click();
283 cy.get('#account-menu').contains('Virtual Machines').click();
285 cy.get('[data-cy=vm-user-panel]')
286 .should('not.contain', vmHost);
288 // Check activeUser's vm page for login
289 cy.loginAs(activeUser);
290 cy.get('header button[title="Account Management"]').click();
291 cy.get('#account-menu').contains('Virtual Machines').click();
293 cy.get('[data-cy=vm-user-panel]')
294 .should('not.contain', vmHost);