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', 'Admin', 'User', true, true)
17 .as('adminUser').then(function() {
18 adminUser = this.adminUser;
21 cy.getUser('user', 'Active', '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('admin');
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('active 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();
134 cy.get('[data-cy=vm-admin-table]')
139 cy.get('div[role=button]').contains('user').parents('[role=button]').within(() => {
140 cy.get('svg').click();
143 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
145 cy.get('[data-cy=vm-admin-table]')
149 cy.get('div[role=button]').should('not.contain', 'user');
150 cy.get('div[role=button]').should('have.length', 1)
152 // Remove admin login
153 cy.get('div[role=button]').contains('admin').parents('[role=button]').within(() => {
154 cy.get('svg').click();
157 cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
159 cy.get('[data-cy=vm-admin-table]')
163 cy.get('div[role=button]').should('not.contain', 'admin');
166 // Check admin's vm page for login
167 cy.get('header button[title="Account Management"]').click();
168 cy.get('#account-menu').contains('Virtual Machines').click();
170 cy.get('[data-cy=vm-user-table]')
171 .should('not.contain', vmHost);
173 // Check activeUser's vm page for login
174 cy.loginAs(activeUser);
175 cy.get('header button[title="Account Management"]').click();
176 cy.get('#account-menu').contains('Virtual Machines').click();
178 cy.get('[data-cy=vm-user-table]')
179 .should('not.contain', vmHost);