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 permissions')
47 .contains('Search for users')
50 cy.get('input').type('VMAdmin');
53 cy.get('[role=tooltip]').click();
54 cy.get('[data-cy=form-dialog]')
55 .should('contain', 'Add login permissions')
58 .contains('Add groups')
61 cy.get('input').type('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 permissions')
85 .contains('Search for users')
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').contains('docker');
127 cy.get('td').contains('ssh user@' + vmHost);
130 // Remove login permissions
131 cy.loginAs(adminUser);
132 cy.get('header button[title="Admin Panel"]').click();
133 cy.get('#admin-menu').contains('Virtual Machines').click();
135 cy.get('[data-cy=vm-admin-table]')
136 .contains('user'); // Wait for page to finish
138 cy.get('[data-cy=vm-admin-table]')
143 .parents('[role=button]')
146 cy.get('@removeButton').click();
147 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
151 cy.get('div[role=button]').should('not.contain', 'user');
152 cy.get('div[role=button]').should('have.length', 1)
156 .find('div[role=button]')
158 .parents('[role=button]')
161 cy.get('@removeButton').click();
162 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
164 cy.get('[data-cy=vm-admin-table]')
168 cy.get('div[role=button]').should('not.contain', 'admin');
171 // Check admin's vm page for login
172 cy.get('header button[title="Account Management"]').click();
173 cy.get('#account-menu').contains('Virtual Machines').click();
175 cy.get('[data-cy=vm-user-panel]')
176 .should('not.contain', vmHost);
178 // Check activeUser's vm page for login
179 cy.loginAs(activeUser);
180 cy.get('header button[title="Account Management"]').click();
181 cy.get('#account-menu').contains('Virtual Machines').click();
183 cy.get('[data-cy=vm-user-panel]')
184 .should('not.contain', vmHost);