Test Workflow
- Create an Account
- Create a new account with the following credentials:
- username: testacct
- password: password
- Sign In
- Sign In with new credentials above
- You should be redirected to /home after login
- Search Services
- Search for "Clowder" in the Services Pane
- You should see only components of the "Clowder" stack listed
- Open a duplicate browser window to test auto refresh?
- Add a New Stack of Services
- Add a new Clowder stack
- Do not specify any options
- Create a new volume
- Add Service to Stack
- Add "PlantCV" to new Clowder stack
- This should add both PlantCV and RabbitMQ
- RabbitMQ should not be removable
- Start Stack
- Start the Clowder stack
- Status Order: Stopped -> Waiting -> Starting -> Ready
- View Logs should be available when services are "waiting," "starting," or "ready"
- Endpoint Links should appear once stack is fully "started"
- Sign into Clowder, register for an account, and upload a file
- This is just to test that persisted data is preserved
- Stop Stack
- Stop the Clowder stack
- Status Order: Ready -> Stopping -> Stopped
- Remove Service from Stack
- Remove "PlantCV" from the Clowder stack
- RabbitMQ should now be removable
- Remove "RabbitMQ" from the Clowder stack
- Delete Stack
- Delete the Clowder stack
- Opt to save the volumes for later (i.e. orphan them, do not delete)
- Add a New Stack of Services
- Add another Clowder stack
- This time, specify options: ElasticSearch
- Opt to reuse the orphaned volumes from before
- Start Stack
- Start the Clowder stack
- Status Order: Stopped -> Waiting -> Starting -> Ready
- View Logs should be available when services are "waiting," "starting," or "ready"
- Endpoint Links should appear once stack is fully "started"
- Sign into Clowder and verify that our account and uploaded image are still present
- Stop Stack
- Stop the Clowder stack
- Status Order: Ready -> Stopping -> Stopped
- Delete Stack
- Delete the Clowder stack
- Once again, save its volumes (i.e. orphan them, do not delete)
- Delete Volume
- Delete the orphaned volume manually
- Add a New Stack of Services
- Add one more Clowder stack
- Create a new volume
- Delete Stack
- Delete the stack you just created, opting to destroy data volumes
- Sign Out
Use Cases
Login View
Create an Account
- DISCLAIMER: This function is for demos and local development, and may not show up during production use
- User is prompted to enter information about their new project:
- username: required (aka Kubernetes namespace)
- password: required
- confirm password: required
- project name: optional
- description: optional
Sign In
- User can enter their credentials here
- Valid credentials should log the user in, allowing them to access the REST API functions
- Invalid credentials will yield a special error message
- Unknown (network/server) errors will yield a generic error message
- After logging in, user should be automatically taken to the /home view.
Sign Out
- At any time the user can choose to "Sign Out", which will end their session by deleting the token from their browser
- The user's session will remain open in the backend until their token expires
Home View
Auto Refresh
- Open 2 different browser windows to the GUI
- Log in to the same account on both
- This simulates simultaneous access to a single account by multiple users
- Create a stack on one window, then switch to the other window
- Notice that the second window does not have the new stack
- Toggle Auto Refresh on by clicking the button at the top-right
- You should see the new stack the was added by the other window appear like magic
Search Services
- On the Services Pane (left-hand side for desktop, or at the top on mobile) you should see a list of services that you can add
- The input at the top of this list allows the user to filter the list of specs.
- Search for "Clowder"
- The results below should yield all components of the Clowder stack
Add a New Stack of Services
- Click the "Add" button next to a service on the Services Pane
- A wizard should pop up allowing the user to add and configure the new stack of services
- Requirements Page
- This page should display a description of the stack that will be added
- All required services should be listed
- Any services that require volumes should make this requirement known
- User must enter a name for the stack before clicking "Next"
- User cannot click "Next" without entering a name
- Name must be between 0 and 20 characters
- Options Page
- If this stack contains optional services, user should be taken to the Options Page
- This page present the user with optional services for this stack
- Any services that require other services (dependencies) should make their requirements known.
- User may choose any optional services before clicking "Next"
- If this stack contains optional services, user should be taken to the Options Page
- Configuration Page
- If this stack contains overridable configuration options, user should be taken to the Configuration Page
- This page present the user with Basic and Advanced configuration options
- Basic options include passwords , IPs and any other fields that do not / can not have a default value set.
- Advanced options have a sensible default set, but allow the user to override them for customization
- User must fill out all required fields (i.e. passwords)
- User may generate any passwords using the button on the right side
- If this stack contains overridable configuration options, user should be taken to the Configuration Page
- Volumes Page
- If this stack contains one or more services that require a Volume, user should be taken to the Volumes Page
- User should be shown their volume storage quota
- User should be shown how adding the necessary volumes will affect their storage quota
- User may choose to reattach an orphaned volume, of they would like to reuse the data on it
- Orphaned volumes do not affect projected storage quota, since the are already factored into current usage
- User may not allocate more space than their quota
- Quota must be >= current usage + projected usage
- User must enter a name, size, and unit for each new volume before clicking "Next"
- Name should be defaulted to a sensible default
- Size should be defaulted to 10 GB
- Confirmation Page
- Confirmation Page lists any Services / Volumes that will be added with this operation
- User can review the total operation before clicking "Confirm"
- Upon clicking "Confirm" the new stack should appear in the "Stacks" tab of the Content Pane (right-side on desktop, or bottom on mobile)
- Clicking the stack name (accordion header) will expand the accordion, showing the status of all services within the stack
- From here, user should see options to:
- Start / Stop a stack
- Add / Remove optional services to/from stack
- View the volumes attached to a stack
Add Service to Stack
- User should see "Add Service" next to any optional services that have not been added to this stack
- Clicking "Add Service" should add that service to the stack
- Any services that the newly-added service requires are automatically added to the stack
- The new service(s) will be started the with the stack
Remove Service from Stack
- User should see "Remove Service" next to any optional services that have been added to this stack
- User cannot delete required dependencies of optional services
- For example: In the "Clowder" stack, user should not be able to remove "RabbitMQ" without first removing all extractors
- Clicking "Remove Service" should remove that service from the stack
Start Stack
- User should be able to start a stopped stack
- Upon starting a stack, its status should change to "starting"
- User should see GUI update with altered service statuses as they are received:
- Expected Order: Stopped -> Waiting -> Starting -> Ready
- Click the View Logs button allows the user to View Logs of any services that are "Starting" or "Ready"
- Log Viewer is automatically refreshed, allowing the user to watch the logs in real-time
- Once all services in the stack are "Ready", the stack has been fully "Started"
- User is presented with Endpoint Links to any services that offer an interface
- Upon clicking an endpoint link, user is directed to the web interface offered there
Stop Stack
- User should be able to stop a started stack
- Upon stopping a stack, its status should change to "stopping"
- User should see GUI update with altered service statuses as they are received:
- Expected Order: Ready -> Stopping -> Stopped
- Once all services in the stack are "Stopped", the stack has been fully "Stopped"
Delete Stack
- User should be able to delete a stopped stack
- Upon removing a stack with no volumes, user should be prompted for a simple Yes / No confirmation
- Upon removing a stack with one or more volumes, user should be prompted for confirmation
- User should be given the option to:
- Retain the data volumes of the stack
- this should delete ONLY the stack, and leave the volumes in a Detached state
- Destroy all data from the stack
- this should delete the volumes along with the stack
- Retain the data volumes of the stack
- User should be given the option to:
- If the user chooses one of the "Yes" options, the stack is deleted and removed from the GUI
- If "Destroy all data" option was chosen, the volumes should also be deleted
Delete Volume
- View the "Volumes" tab of the Content Pane (right-side on desktop or bottom on mobile)
- User should see a list of all their allocated volumes
- User should be able to delete a detached volume (orphan)
- User is prompted for confirmation of this deletion
- User is warned that this data will be UNRECOVERABLE
- If the user chooses "Yes", the volume is deleted and removed from the GUI
Regression test for NDS-170
- Configure API Server timeout to 1 minute, restart API server
- Login to GUI
- Wait for 3 minutes (GUI minimum refresh time) and you should be redirected to login page after timeout
- Login to GUI
- Open wizard
- Open Dev console
- Click through wizard, should see "Refreshed token" message in console
- After 3 minutes, you will not be redirected to login page if there is activity in the wizard