[ARVADOS-WORKBENCH2] updated: 2.3.0-212-g7d143711

Git user git at public.arvados.org
Fri Mar 25 20:55:59 UTC 2022


Summary of changes:
 cypress/integration/process.spec.js | 194 ++++++++++++++++++++++++++++++++++++
 1 file changed, 194 insertions(+)
 create mode 100644 cypress/integration/process.spec.js

       via  7d143711cf13f5a5a036dd9ecf3f0110ff525e43 (commit)
      from  ec7ef2afacf9ca476242b33f2cb8a149905bd086 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 7d143711cf13f5a5a036dd9ecf3f0110ff525e43
Author: Lucas Di Pentima <lucas.dipentima at curii.com>
Date:   Fri Mar 25 17:55:35 2022 -0300

    16672: Adds missing test file.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas.dipentima at curii.com>

diff --git a/cypress/integration/process.spec.js b/cypress/integration/process.spec.js
new file mode 100644
index 00000000..75c318db
--- /dev/null
+++ b/cypress/integration/process.spec.js
@@ -0,0 +1,194 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+describe('Process tests', function() {
+    let activeUser;
+    let adminUser;
+
+    before(function() {
+        // Only set up common users once. These aren't set up as aliases because
+        // aliases are cleaned up after every test. Also it doesn't make sense
+        // to set the same users on beforeEach() over and over again, so we
+        // separate a little from Cypress' 'Best Practices' here.
+        cy.getUser('admin', 'Admin', 'User', true, true)
+            .as('adminUser').then(function() {
+                adminUser = this.adminUser;
+            }
+        );
+        cy.getUser('user', 'Active', 'User', false, true)
+            .as('activeUser').then(function() {
+                activeUser = this.activeUser;
+            }
+        );
+    });
+
+    beforeEach(function() {
+        cy.clearCookies();
+        cy.clearLocalStorage();
+    });
+
+    function setupDockerImage(image_name) {
+        // Create a collection that will be used as a docker image for the tests.
+        cy.createCollection(adminUser.token, {
+            name: 'docker_image',
+            manifest_text: ". d21353cfe035e3e384563ee55eadbb2f+67108864 5c77a43e329b9838cbec18ff42790e57+55605760 0:122714624:sha256:d8309758b8fe2c81034ffc8a10c36460b77db7bc5e7b448c4e5b684f9d95a678.tar\n"
+        }).as('dockerImage').then(function(dockerImage) {
+            // Give read permissions to the active user on the docker image.
+            cy.createLink(adminUser.token, {
+                link_class: 'permission',
+                name: 'can_read',
+                tail_uuid: activeUser.user.uuid,
+                head_uuid: dockerImage.uuid
+            }).as('dockerImagePermission').then(function() {
+                // Set-up docker image collection tags
+                cy.createLink(activeUser.token, {
+                    link_class: 'docker_image_repo+tag',
+                    name: image_name,
+                    head_uuid: dockerImage.uuid,
+                }).as('dockerImageRepoTag');
+                cy.createLink(activeUser.token, {
+                    link_class: 'docker_image_hash',
+                    name: 'sha256:d8309758b8fe2c81034ffc8a10c36460b77db7bc5e7b448c4e5b684f9d95a678',
+                    head_uuid: dockerImage.uuid,
+                }).as('dockerImageHash');
+            })
+        });
+        return cy.getAll('@dockerImage', '@dockerImageRepoTag', '@dockerImageHash',
+            '@dockerImagePermission').then(function([dockerImage]) {
+                return dockerImage;
+            });
+    }
+
+    function createContainerRequest(user, name, docker_image, command, reuse = false, state = 'Uncommitted') {
+        return setupDockerImage(docker_image).then(function(dockerImage) {
+            return cy.createContainerRequest(user.token, {
+                name: name,
+                command: command,
+                container_image: dockerImage.portable_data_hash, // for some reason, docker_image doesn't work here
+                output_path: 'stdout.txt',
+                priority: 1,
+                runtime_constraints: {
+                    vcpus: 1,
+                    ram: 1,
+                },
+                use_existing: reuse,
+                state: state,
+                mounts: {
+                    foo: {
+                        kind: 'tmp',
+                        path: '/tmp/foo',
+                    }
+                }
+            });
+        });
+    }
+
+    it('shows process logs', function() {
+        const crName = 'test_container_request';
+        createContainerRequest(
+            activeUser,
+            crName,
+            'arvados/jobs',
+            ['echo', 'hello world'],
+            false, 'Committed')
+        .then(function(containerRequest) {
+            cy.loginAs(activeUser);
+            cy.goToPath(`/processes/${containerRequest.uuid}`);
+            cy.get('[data-cy=process-info]').should('contain', crName);
+            cy.get('[data-cy=process-logs]')
+                .should('contain', 'No logs yet')
+                .and('not.contain', 'hello world');
+            cy.createLog(activeUser.token, {
+                object_uuid: containerRequest.container_uuid,
+                properties: {
+                    text: 'hello world'
+                },
+                event_type: 'stdout'
+            }).then(function(log) {
+                cy.get('[data-cy=process-logs]')
+                    .should('not.contain', 'No logs yet')
+                    .and('contain', 'hello world');
+            })
+        });
+    });
+
+    it('filters process logs by event type', function() {
+        const nodeInfoLogs = [
+            'Host Information',
+            'Linux compute-99cb150b26149780de44b929577e1aed-19rgca8vobuvc4p 5.4.0-1059-azure #62~18.04.1-Ubuntu SMP Tue Sep 14 17:53:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux',
+            'CPU Information',
+            'processor  : 0',
+            'vendor_id  : GenuineIntel',
+            'cpu family : 6',
+            'model      : 79',
+            'model name : Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz'
+        ];
+        const crunchRunLogs = [
+            '2022-03-22T13:56:22.542417997Z using local keepstore process (pid 3733) at http://localhost:46837, writing logs to keepstore.txt in log collection',
+            '2022-03-22T13:56:26.237571754Z crunch-run 2.4.0~dev20220321141729 (go1.17.1) started',
+            '2022-03-22T13:56:26.244704134Z crunch-run process has uid=0(root) gid=0(root) groups=0(root)',
+            '2022-03-22T13:56:26.244862836Z Executing container \'zzzzz-dz642-1wokwvcct9s9du3\' using docker runtime',
+            '2022-03-22T13:56:26.245037738Z Executing on host \'compute-99cb150b26149780de44b929577e1aed-19rgca8vobuvc4p\'',
+        ];
+        const stdoutLogs = [
+            'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dui nisi, hendrerit porta sapien a, pretium dignissim purus.',
+            'Integer viverra, mauris finibus aliquet ultricies, dui mauris cursus justo, ut venenatis nibh ex eget neque.',
+            'In hac habitasse platea dictumst.',
+            'Fusce fringilla turpis id accumsan faucibus. Donec congue congue ex non posuere. In semper mi quis tristique rhoncus.',
+            'Interdum et malesuada fames ac ante ipsum primis in faucibus.',
+            'Quisque fermentum tortor ex, ut suscipit velit feugiat faucibus.',
+            'Donec vitae porta risus, at luctus nulla. Mauris gravida iaculis ipsum, id sagittis tortor egestas ac.',
+            'Maecenas condimentum volutpat nulla. Integer lacinia maximus risus eu posuere.',
+            'Donec vitae leo id augue gravida bibendum.',
+            'Nam libero libero, pretium ac faucibus elementum, mattis nec ex.',
+            'Nullam id laoreet nibh. Vivamus tellus metus, pretium quis justo ut, bibendum varius metus. Pellentesque vitae accumsan lorem, quis tincidunt augue.',
+            'Aliquam viverra nisi nulla, et efficitur dolor mattis in.',
+            'Sed at enim sit amet nulla tincidunt mattis. Aenean eget aliquet ex, non ultrices ex. Nulla ex tortor, vestibulum aliquam tempor ac, aliquam vel est.',
+            'Fusce auctor faucibus libero id venenatis. Etiam sodales, odio eu cursus efficitur, quam sem blandit ex, quis porttitor enim dui quis lectus. In id tincidunt felis.',
+            'Phasellus non ex quis arcu tempus faucibus molestie in sapien.',
+            'Duis tristique semper dolor, vitae pulvinar risus.',
+            'Aliquam tortor elit, luctus nec tortor eget, porta tristique nulla.',
+            'Nulla eget mollis ipsum.',
+        ];
+
+        createContainerRequest(
+            activeUser,
+            'test_container_request',
+            'arvados/jobs',
+            ['echo', 'hello world'],
+            false, 'Committed')
+        .then(function(containerRequest) {
+            cy.logsForContainer(activeUser.token, containerRequest.container_uuid,
+                'node-info', nodeInfoLogs).as('nodeInfoLogs');
+            cy.logsForContainer(activeUser.token, containerRequest.container_uuid,
+                'crunch-run', crunchRunLogs).as('crunchRunLogs');
+            cy.logsForContainer(activeUser.token, containerRequest.container_uuid,
+                'stdout', stdoutLogs).as('stdoutLogs');
+            cy.getAll('@stdoutLogs', '@nodeInfoLogs', '@crunchRunLogs').then(function() {
+                cy.loginAs(activeUser);
+                cy.goToPath(`/processes/${containerRequest.uuid}`);
+                // Should should all logs
+                cy.get('[data-cy=process-logs-filter]').should('contain', 'All logs');
+                cy.get('[data-cy=process-logs]')
+                    .should('contain', stdoutLogs[Math.floor(Math.random() * stdoutLogs.length)])
+                    .and('contain', nodeInfoLogs[Math.floor(Math.random() * nodeInfoLogs.length)])
+                    .and('contain', crunchRunLogs[Math.floor(Math.random() * crunchRunLogs.length)]);
+                // Select 'node-info' logs
+                cy.get('[data-cy=process-logs-filter]').click();
+                cy.get('body').contains('li', 'node-info').click();
+                cy.get('[data-cy=process-logs]')
+                    .should('not.contain', stdoutLogs[Math.floor(Math.random() * stdoutLogs.length)])
+                    .and('contain', nodeInfoLogs[Math.floor(Math.random() * nodeInfoLogs.length)])
+                    .and('not.contain', crunchRunLogs[Math.floor(Math.random() * crunchRunLogs.length)]);
+                // Select 'stdout' logs
+                cy.get('[data-cy=process-logs-filter]').click();
+                cy.get('body').contains('li', 'stdout').click();
+                cy.get('[data-cy=process-logs]')
+                    .should('contain', stdoutLogs[Math.floor(Math.random() * stdoutLogs.length)])
+                    .and('not.contain', nodeInfoLogs[Math.floor(Math.random() * nodeInfoLogs.length)])
+                    .and('not.contain', crunchRunLogs[Math.floor(Math.random() * crunchRunLogs.length)]);
+            });
+        });
+    });
+});
\ No newline at end of file

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list