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();
67 cy.get('[data-cy=vm-admin-table]')
71 cy.get('td').contains('admin');
74 // Add login permission to activeUser
75 cy.get('[data-cy=vm-admin-table]')
79 cy.get('button[title="Add Login Permission"]').click();
81 cy.get('[data-cy=form-dialog]')
82 .should('contain', 'Add login permission')
85 .contains('Search for user')
88 cy.get('input').type('VMActive user');
91 cy.get('[role=tooltip]').click();
92 cy.get('[data-cy=form-dialog]').within(() => {
93 cy.get('[data-cy=form-submit-btn]').click();
95 cy.get('[data-cy=vm-admin-table]')
99 cy.get('td').contains('user');
102 // Check admin's vm page for login
103 cy.get('header button[title="Account Management"]').click();
104 cy.get('#account-menu').contains('Virtual Machines').click();
106 cy.get('[data-cy=vm-user-table]')
110 cy.get('td').contains('admin');
111 cy.get('td').contains('docker');
112 cy.get('td').contains('sudo');
113 cy.get('td').contains('ssh admin@' + vmHost);
116 // Check activeUser's vm page for login
117 cy.loginAs(activeUser);
118 cy.get('header button[title="Account Management"]').click();
119 cy.get('#account-menu').contains('Virtual Machines').click();
121 cy.get('[data-cy=vm-user-table]')
125 cy.get('td').contains('user');
126 cy.get('td').should('not.contain', 'docker');
127 cy.get('td').should('not.contain', 'sudo');
128 cy.get('td').contains('ssh user@' + vmHost);
131 // Edit login permissions
132 cy.loginAs(adminUser);
133 cy.get('header button[title="Admin Panel"]').click();
134 cy.get('#admin-menu').contains('Virtual Machines').click();
136 cy.get('[data-cy=vm-admin-table]')
137 .contains('admin'); // Wait for page to finish
139 cy.get('[data-cy=vm-admin-table]')
145 cy.get('[data-cy=form-dialog]')
146 .should('contain', 'Update login permission')
149 .contains('Add groups')
154 cy.get('@groupInput').within(() => {
155 cy.get('div[role=button]').contains('sudo').parent().find('svg').click();
156 cy.get('div[role=button]').contains('docker').parent().find('svg').click();
159 cy.get('[data-cy=form-dialog]').within(() => {
160 cy.get('[data-cy=form-submit-btn]').click();
163 cy.get('[data-cy=vm-admin-table]')
164 .contains('user'); // Wait for page to finish
166 cy.get('[data-cy=vm-admin-table]')
172 cy.get('[data-cy=form-dialog]')
173 .should('contain', 'Update login permission')
176 .contains('Add groups')
179 cy.get('input').type('docker{enter}');
183 cy.get('[data-cy=form-dialog]').within(() => {
184 cy.get('[data-cy=form-submit-btn]').click();
187 // Verify new login permissions
188 // Check admin's vm page for login
189 cy.get('header button[title="Account Management"]').click();
190 cy.get('#account-menu').contains('Virtual Machines').click();
192 cy.get('[data-cy=vm-user-table]')
196 cy.get('td').contains('admin');
197 cy.get('td').should('not.contain', 'docker');
198 cy.get('td').should('not.contain', 'sudo');
199 cy.get('td').contains('ssh admin@' + vmHost);
202 // Verify new login permissions
203 // Check activeUser's vm page for login
204 cy.loginAs(activeUser);
205 cy.get('header button[title="Account Management"]').click();
206 cy.get('#account-menu').contains('Virtual Machines').click();
208 cy.get('[data-cy=vm-user-table]')
212 cy.get('td').contains('user');
213 cy.get('td').contains('docker');
214 cy.get('td').should('not.contain', 'sudo');
215 cy.get('td').contains('ssh user@' + vmHost);
218 // Remove login permissions
219 cy.loginAs(adminUser);
220 cy.get('header button[title="Admin Panel"]').click();
221 cy.get('#admin-menu').contains('Virtual Machines').click();
223 cy.get('[data-cy=vm-admin-table]')
224 .contains('user'); // Wait for page to finish
226 cy.get('[data-cy=vm-admin-table]')
231 .parents('[role=button]')
234 cy.get('@removeButton').click();
235 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
239 cy.get('div[role=button]').should('not.contain', 'user');
240 cy.get('div[role=button]').should('have.length', 1)
244 .find('div[role=button]')
246 .parents('[role=button]')
249 cy.get('@removeButton').click();
250 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
252 cy.get('[data-cy=vm-admin-table]')
256 cy.get('div[role=button]').should('not.contain', 'admin');
259 // Check admin's vm page for login
260 cy.get('header button[title="Account Management"]').click();
261 cy.get('#account-menu').contains('Virtual Machines').click();
263 cy.get('[data-cy=vm-user-panel]')
264 .should('not.contain', vmHost);
266 // Check activeUser's vm page for login
267 cy.loginAs(activeUser);
268 cy.get('header button[title="Account Management"]').click();
269 cy.get('#account-menu').contains('Virtual Machines').click();
271 cy.get('[data-cy=vm-user-panel]')
272 .should('not.contain', vmHost);