Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.
Completing validation and testing verifies that your Citrix + Orka VDI environment functions correctly before it is deployed to production. This typically consists of testing end-to-end user connectivity, VM lifecycle operations, establishing a performance baseline, and troubleshooting procedures.
Before beginning the testing and validation process, ensure:
Any and all relevant environment preparation, Citrix DaaS configuration, Mac host provisioning, Ansible playbook configuration, and image management steps have been completed successfully
Golden images have been created and cached on Orka hosts
Test VMs have been successfully deployed with Citrix VDA
VDA registration is confirmed in Citrix Cloud Console
Test user accounts are configured with access to Delivery Groups
The Citrix Workspace app has been installed on test client devices
Network configuration:
VMs deployed with bridged networking (network_interface set, for example en0). VMs deployed without it use NAT, which Citrix Cloud and end users can’t reach
deploy.yml only deploys the VM: unless the golden image includes the Citrix VDA, run install_citrix_vda.yml, and then run register_citrix_vda.yml for each test VM. Then verify VDA registration via the Citrix Cloud Console. Navigate to Manage → Virtual Apps and Desktops → Delivery Groups and confirm the VMs appear with a Registered status.
Test authentication workflow
Launch the Citrix Workspace application on the test client
Time how long it takes the desktop to appear Expected result: Desktop launches successfully within 15-30 seconds, macOS login screen or desktop appears Common issues:
Connection timeout: Check network connectivity from client to Citrix Cloud.Verify Rendezvous connectivity from within a running VDA session by opening Terminal and running:
To properly validate the VM lifecycle works as expected through Ansible automation, you will want to consider testing this in its entirety. The complete VM lifecycle is as follows: Deploy → Start → Stop → Restart → Backup → Recreate → DeleteThese operations form the foundation of desktop pool management with MacStadium VDI. When testing, the following lifecycle phases should be validated:
After the VM has been deployed and its VDA registered with register_citrix_vda.yml (install the VDA first with install_citrix_vda.yml if the golden image doesn’t include it), you will want to confirm the VM has received an IP address from DHCP, it is accessible via SSH, the VDA service has started automatically and has been registered with Citrix Cloud, the desktop appears in Citrix Workspace, and users can successfully launch a session. You may also wish to record the amount of time it takes to complete this workflow from the time launch commands are executed to desktop availability.
Pass network_interface every time you start a VM, including when vm.yml starts a whole prefix group. Orka Engine doesn’t save the network interface with the VM, so a VM started without it comes up on NAT, where Citrix Cloud and end users can’t reach it.You will want to confirm that the VM boots successfully, the VDA service restarts automatically, the VDA re-registers with Citrix Cloud, desktop returns to “Available” state, and that users can successfully launch a new session.Stop a VM:
You will want to confirm that the VM stops gracefully (clean shutdown), that the VM state changes to “Stopped” in MacStadium VDI, the desktop becomes unavailable in Citrix Workspace, and that no active sessions remain.Restart a VM (stop then start):
# Stop the VM ansible-playbook -i dev/inventory vm.yml -e "vm_name=lifecycle-test-01" -e "desired_state=stopped" # Start the VM ansible-playbook -i dev/inventory vm.yml -e "vm_name=lifecycle-test-01" -e "desired_state=running" -e "network_interface=en0"
You will want to confirm that the VM restarts cleanly and without corruption, that boot time is reasonable, all services start correctly, and the desktop is available after restarting.Recover a VM: Note: This implementation does not have a dedicated recovery playbook.To recover a VM:
Deploy a new VM from a versioned golden image stored in your registry
Register the VDA with Citrix Cloud by running register_citrix_vda.yml with an enrollment token
You will want to confirm that the VM has been recovered from backup, retains its configuration from the backup point, the VDA re-registers successfully, and the desktop is functional.Delete a VM:
Deleting VMs matches names by prefix.delete.yml, and vm.yml with desired_state=absent, delete every VM whose name starts with the vm_name you pass, not only the VM with that exact name. For example, vm_name=citrix-vda-finance deletes every VM in that group. Before you delete, run list.yml and make sure no VM you want to keep has a name that starts with the value you’re passing.
You will want to confirm the VM has been deleted from MacStadium VDI, the VM has been unregistered from Citrix Cloud, the desktop is removed from Citrix Workspace, resources have been freed on the Orka host.
Establishing performance baselines helps identify potential points of service degradation, and helps validate that your MacStadium VDI environment meets user expectations. Having a baseline established also provides a reference point for troubleshooting, provides capacity planning data for scaling considerations, provides user experience metrics to measure service quality, and allows for regressions to be detected when adverse changes may occur.Some metrics to consider measuring are:
VM deployment time
How long does it take from playbook execution to the time a VDA is registered?
To establish a baseline, record the average, minimum, and maximum time across 10+ deployments and set an acceptable target (for example, <5 minutes for cached images).
Session launch time
How long does it take after clicking a desktop in Citrix Workspace to having a usable desktop?
To establish a baseline, test from multiple client locations such as office, remote, or mobile. An example target: <15 seconds for Rendezvous, <10 seconds for a direct connection.
HDX session quality
Record the average framerate during normal desktop use
If there is input lag from keyboard/mouse to on-screen updates, how long does it take to resolve? Does the behavior persist upon restart?
How long does it take to launch an application within a desktop session?
Is video playback quality acceptable?
Network latency
What is the round-trip time from client to VM?
You can measure this using ping or HDX diagnostics
Test network latency under various conditions and configurations
Resource utilization
What is the host CPU usage when VMs are running?
What is the average memory consumption per VM?
What disk I/O patterns are observed?
What is the average network bandwidth per session?
Expected result: AVD restarts cleanly, ADB reconnects automatically, relay port is reachable again.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"MacStadium Docs","description":"Documentation for MacStadium's Apple infrastructure: Orka macOS virtualization for CI/CD, bare metal Mac hosting, MacStadium VDI, and account, billing, and support guides.","colors":{"primary":"#FE9000","light":"#FE9000","dark":"#323151"},"logo":{"light":"https://mintcdn.com/macstadiuminc/qJnYHjjgtjKQ73n9/logo/light.png?fit=max\u0026auto=format\u0026n=qJnYHjjgtjKQ73n9\u0026q=85\u0026s=8095707b80300088ba5f7c1cd8363d18","dark":"https://mintcdn.com/macstadiuminc/qJnYHjjgtjKQ73n9/logo/dark.png?fit=max\u0026auto=format\u0026n=qJnYHjjgtjKQ73n9\u0026q=85\u0026s=a7103488c2b17f28a81966f51e8e7e46"},"favicon":"https://mintcdn.com/macstadiuminc/OBF0bbLSkBRXQGQP/favicon.png?fit=max\u0026auto=format\u0026n=OBF0bbLSkBRXQGQP\u0026q=85\u0026s=f810953a4ccb3af9a5d809d6eba89505","seo":{"metatags":{"google-site-verification":"OeKTGa7HvmEnL1jtMDksZEYQg1LGTk97_JlFSE5nxF4"}},"integrations":{"ga4":{"measurementId":"G-LW571X03HJ"},"telemetry":{"enabled":true}},"banner":{"content":"Welcome to the new MacStadium Documentation site. We've migrated from support.macstadium.com, you're in the right place.","dismissible":true},"contextual":{"options":["copy","view","claude","chatgpt","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"macstadiuminc","hasAudioNarration":false,"actualSubdomain":"macstadiuminc","customDomains":["docs.macstadium.com"],"gitSource":{"type":"github","owner":"macstadium","repo":"macstadium-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"edits":false,"issues":false,"agentFeedback":true,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af490bac370e18e6a3fdc93","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Orka","count":109},{"language":"default","tag":"IaaS","count":63},{"language":"default","tag":"Networking","count":53},{"language":"default","tag":"MacStadium VDI","count":40},{"language":"default","tag":"MacStadium","count":28},{"language":"default","tag":"Connecting to Other Clouds","count":19},{"language":"default","tag":"Cisco Firewalls","count":17},{"language":"default","tag":"Resources","count":14},{"language":"default","tag":"Overview","count":13},{"language":"default","tag":"CLI Reference","count":13}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@macstadium.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"remote-desktop-vdi/operations/validation-and-testing","slug":"/remote-desktop-vdi/operations/validation-and-testing","pageMetadata":{"title":"Validation and testing","description":"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.","zendesk_id":44332879842587,"keywords":["VDI validation","deployment testing","Citrix VDA verification","performance baseline","VDI acceptance testing"],"href":"/remote-desktop-vdi/operations/validation-and-testing"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={br:`br`,code:`code`,h5:`h5`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Completing validation and testing verifies that your Citrix + Orka VDI environment functions correctly before it is deployed to production. This typically consists of testing end-to-end user connectivity, VM lifecycle operations, establishing a performance baseline, and troubleshooting procedures.`}),`\n`,_jsx(Heading,{level:`4`,id:`testing-prerequisites`,children:`Testing Prerequisites`}),`\n`,_jsx(_components.p,{children:`Before beginning the testing and validation process, ensure:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Any and all relevant environment preparation, Citrix DaaS configuration, Mac host provisioning, Ansible playbook configuration, and image management steps have been completed successfully`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Golden images have been created and cached on Orka hosts`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test VMs have been successfully deployed with Citrix VDA`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`VDA registration is confirmed in Citrix Cloud Console`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test user accounts are configured with access to Delivery Groups`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`The Citrix Workspace app has been installed on test client devices`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Network configuration:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`VMs deployed with bridged networking (`,_jsx(_components.code,{children:`network_interface`}),` set, for example `,_jsx(_components.code,{children:`en0`}),`). VMs deployed without it use NAT, which Citrix Cloud and end users can’t reach`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`end-to-end-connectivity-test-via-citrix-workspace`,children:`End-to-End Connectivity Test via Citrix Workspace`}),`\n`,_jsx(_components.p,{children:`This test validates the complete user journey from authentication to desktop usage.`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Deploy 2-3 test VMs from your golden image, for example:`}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=citrix-test-01\" -e \"vm_image=registry.example.com/citrix-vda/sonoma-finance:latest\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=citrix-test-02\" -e \"vm_image=registry.example.com/citrix-vda/sonoma-finance:latest\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=citrix-test-03\" -e \"vm_image=registry.example.com/citrix-vda/sonoma-finance:latest\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`deploy.yml`}),` only deploys the VM: unless the golden image includes the Citrix VDA, run `,_jsx(_components.code,{children:`install_citrix_vda.yml`}),`, and then run `,_jsx(_components.code,{children:`register_citrix_vda.yml`}),` for each test VM. Then verify VDA registration via the Citrix Cloud Console. Navigate to Manage → Virtual Apps and Desktops → Delivery Groups and confirm the VMs appear with a Registered status.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test authentication workflow`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Launch the Citrix Workspace application on the test client`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Enter workspace URL or email address`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Authenticate with test user credentials`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify multi-factor authentication (if enabled)`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` Successful authentication, workspace dashboard loads`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Common issues:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Authentication fails: Verify user exists in identity provider and is assigned to the correct Delivery Group`}),`\n`,_jsx(_components.li,{children:`MFA problems: Check MFA configuration in Citrix Cloud`}),`\n`,_jsx(_components.li,{children:`Workspace URL incorrect: Confirm workspace URL matches Citrix Cloud tenant`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`desktop-visibility-testing-in-citrix-workspace`,children:`Desktop Visibility Testing in Citrix Workspace`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Navigate to the ‘Desktops’ tab in Citrix Workspace`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify test desktop appears with the correct display name`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Confirm desktop icon and description match configuration`,_jsx(_components.br,{}),`\n`,_jsx(_components.strong,{children:`Expected result:`}),` Desktop(s) visible with correct name from Delivery Group`,_jsx(_components.br,{}),`\n`,_jsx(_components.strong,{children:`Common issues:`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`No desktops appear:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Check user assignment in the Delivery Group`}),`\n`,_jsx(_components.li,{children:`Verify VMs are registered in Citrix Cloud Console`}),`\n`,_jsx(_components.li,{children:`Confirm VMs are in an “Available” state (not “In Use” or “Unregistered”)`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Wrong desktop name`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Update the desktop display name in Delivery Group settings`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`session-launch-testing-in-citrix-workspace`,children:`Session Launch Testing in Citrix Workspace`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Click the desktop to launch`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Monitor connection progress`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Time how long it takes the desktop to appear`,_jsx(_components.br,{}),`\n`,_jsx(_components.strong,{children:`Expected result:`}),` Desktop launches successfully within 15-30 seconds, macOS login screen or desktop appears`,_jsx(_components.br,{}),`\n`,_jsx(_components.strong,{children:`Common issues:`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Connection timeout:`}),` Check network connectivity from client to Citrix Cloud.`]}),`\n`,_jsx(_components.p,{children:`Verify Rendezvous connectivity from within a running VDA session by opening Terminal and running:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -v`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://[customer_ID].xendesktop.net`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` 2>\u00261`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` grep`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Connected`})]}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Confirm firewall allows HDX ports (1494, 2598)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`If you see a black screen, the VDA service may not be running, restart the VDA service from within the VM:`}),`\n`]}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` sudo launchctl kickstart -k system/com.citrix.vda`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsx(_components.li,{children:`Slow to launch: Check VM resource allocation and host performance`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`desktop-functionality-testing-in-citrix-workspace`,children:`Desktop Functionality Testing in Citrix Workspace`}),`\n`,_jsx(_components.h5,{children:`Display and resolution`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify screen resolution matches client display`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test full-screen mode`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test windowed mode and window resizing`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Check multiple monitors are supported, if available`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Input devices`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test keyboard by typing in Notes/TextEdit`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test mouse movement and clicks register as expected`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test trackpad gestures`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Application functionality`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Launch a browser (Safari, Chrome, Firefox, etc.)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Launch installed applications (Microsoft Office, Slack)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Confirm the ability to open and edit documents`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Test switching between applications with `,_jsx(_components.code,{children:`Cmd+Tab`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` All inputs are responsive, applications launch normally with no lag or stuttering`]}),`\n`,_jsx(Heading,{level:`4`,id:`peripheral-and-feature-testing-in-citrix-workspace`,children:`Peripheral and Feature Testing in Citrix Workspace`}),`\n`,_jsx(_components.h5,{children:`Clipboard functionality`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test Clipboard (Copy/Paste) functionality`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Copy text from client device → paste into VM`}),`\n`,_jsx(_components.li,{children:`Copy text from VM → paste into client device`}),`\n`,_jsx(_components.li,{children:`Test the ability to copy/paste formatted text, images, and files`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`File transfers`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Drag a file from the client to the VM desktop`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Download a file from the VM to the client`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Confirm the downloaded file appears in the correct location and is readable`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Printing`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Attempt to print a document`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify client-side printers appear in the VM`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test ‘print preview’ functionality`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify printing a document was successful`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Audio`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify audio plays in VM (System sounds, YouTube videos played in browser, etc.)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify audio plays on client device`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test microphone input (if supported)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test headphone/bluetooth audio output (if supported)`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`USB redirection (if enabled)`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Connect USB devices to client`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify device appears in VM`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test device functionality`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` All features work as expected with minimal latency`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Common issues:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Clipboard isn’t working: Check HDX policy settings in Citrix`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`No file transfer: Verify file transfer policies are enabled`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Printer issues: Check printer mapping settings in Citrix Workspace`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`No audio: Verify audio policy and codec settings`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`session-management-in-citrix-workspace`,children:`Session Management in Citrix Workspace`}),`\n`,_jsx(_components.h5,{children:`Disconnect and reconnect`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Disconnect Citrix Workspace session (close Workspace window without logging out first)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Reopen Citrix Workspace and reconnect to the same desktop`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify work is preserved (previously opened documents are still open)`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Session timeout`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Leave the workspace session idle for the configured timeout period`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify session disconnects automatically`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Reconnect and verify session state`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Multiple sessions (if allowed)`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Launch second desktop while the first is running`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Switch between desktops`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify both remain responsive`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Logging out`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Log out from the desktop`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify session ends cleanly`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Desktop returns to “Available” state in Citrix Cloud`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` Sessions connect/disconnect cleanly, state is preserved, no hung sessions`]}),`\n`,_jsx(Heading,{level:`4`,id:`network-resilience-testing-in-citrix-workspace`,children:`Network Resilience Testing in Citrix Workspace`}),`\n`,_jsx(_components.h5,{children:`Network interruption`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`During an active session, briefly disconnect the client network`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Reconnect to network after 10-20 seconds`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify session automatically reconnects`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.h5,{children:`Bandwidth limitations`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Simulate low bandwidth (if possible)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify session adapts (quality is lowered, but still usable)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`HDX should automatically optimize for available bandwidth`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` Session survives brief interruptions, and adapts to bandwidth changes`]}),`\n`,_jsx(Heading,{level:`4`,id:`multi-user-testing-in-citrix-workspace`,children:`Multi-User Testing in Citrix Workspace`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Have multiple users connect simultaneously if testing with pooled (random assignment) desktops`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify each user gets a different VM`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Confirm there are no conflicts or resource contention`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Users log out, VMs return to pool`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Users reconnect, get different (or same) VM based on company policy`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` Multiple users can connect simultaneously without issues`]}),`\n`,_jsx(Heading,{level:`4`,id:`documenting-test-results`,children:`Documenting Test Results`}),`\n`,_jsx(_components.p,{children:`You may wish to record your test results for future reference or auditing/compliance needs. Things of note to include are:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`The date and time a test was performed`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Client device type and OS`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Network conditions (WiFi, VPN, etc.)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Session launch time and duration`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Any issues encountered and their resolution`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Screenshots/confirmation of successful connection to a workspace or VM`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`vm-lifecycle-validation`,children:`VM Lifecycle Validation`}),`\n`,_jsxs(_components.p,{children:[`To properly validate the VM lifecycle works as expected through Ansible automation, you will want to consider testing this in its entirety. The complete VM lifecycle is as follows: `,_jsx(_components.code,{children:`Deploy → Start → Stop → Restart → Backup → Recreate → Delete`})]}),`\n`,_jsx(_components.p,{children:`These operations form the foundation of desktop pool management with MacStadium VDI. When testing, the following lifecycle phases should be validated:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Deploy VM from a golden image:`}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=lifecycle-test-01\" -e \"vm_image=registry.example.com/citrix-vda/sonoma-finance:latest\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`After the VM has been deployed and its VDA registered with `,_jsx(_components.code,{children:`register_citrix_vda.yml`}),` (install the VDA first with `,_jsx(_components.code,{children:`install_citrix_vda.yml`}),` if the golden image doesn’t include it), you will want to confirm the VM has received an IP address from DHCP, it is accessible via SSH, the VDA service has started automatically and has been registered with Citrix Cloud, the desktop appears in Citrix Workspace, and users can successfully launch a session. You may also wish to record the amount of time it takes to complete this workflow from the time launch commands are executed to desktop availability.`]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsx(_components.li,{children:`VM power operations`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Start a VM:`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory vm.yml -e \"vm_name=lifecycle-test-01\" -e \"desired_state=running\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`network_interface`}),` every time you start a VM, including when `,_jsx(_components.code,{children:`vm.yml`}),` starts a whole prefix group. Orka Engine doesn’t save the network interface with the VM, so a VM started without it comes up on NAT, where Citrix Cloud and end users can’t reach it.`]}),`\n`,_jsx(_components.p,{children:`You will want to confirm that the VM boots successfully, the VDA service restarts automatically, the VDA re-registers with Citrix Cloud, desktop returns to “Available” state, and that users can successfully launch a new session.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Stop a VM:`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory vm.yml -e \"vm_name=lifecycle-test-01\" -e \"desired_state=stopped\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`You will want to confirm that the VM stops gracefully (clean shutdown), that the VM state changes to “Stopped” in MacStadium VDI, the desktop becomes unavailable in Citrix Workspace, and that no active sessions remain.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Restart a VM (stop then start):`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` # Stop the VM`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory vm.yml -e \"vm_name=lifecycle-test-01\" -e \"desired_state=stopped\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` # Start the VM`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory vm.yml -e \"vm_name=lifecycle-test-01\" -e \"desired_state=running\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`You will want to confirm that the VM restarts cleanly and without corruption, that boot time is reasonable, all services start correctly, and the desktop is available after restarting.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Recover a VM:`}),` Note: This implementation does not have a dedicated recovery playbook.`]}),`\n`,_jsx(_components.p,{children:`To recover a VM:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Deploy a new VM from a versioned golden image stored in your registry`}),`\n`,_jsxs(_components.li,{children:[`Register the VDA with Citrix Cloud by running `,_jsx(_components.code,{children:`register_citrix_vda.yml`}),` with an enrollment token`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Example:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=recovered-vm-01\" -e \"vm_image=registry.example.com/backups/sonoma-finance:2025-01-15\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`You will want to confirm that the VM has been recovered from backup, retains its configuration from the backup point, the VDA re-registers successfully, and the desktop is functional.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Delete a VM:`})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Deleting VMs matches names by prefix.`}),` `,_jsx(_components.code,{children:`delete.yml`}),`, and `,_jsx(_components.code,{children:`vm.yml`}),` with `,_jsx(_components.code,{children:`desired_state=absent`}),`, delete every VM whose name starts with the `,_jsx(_components.code,{children:`vm_name`}),` you pass, not only the VM with that exact name. For example, `,_jsx(_components.code,{children:`vm_name=citrix-vda-finance`}),` deletes every VM in that group. Before you delete, run `,_jsx(_components.code,{children:`list.yml`}),` and make sure no VM you want to keep has a name that starts with the value you’re passing.`]})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ansible-playbook -i dev/inventory vm.yml -e \"vm_name=lifecycle-test-01\" -e \"desired_state=absent\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`You will want to confirm the VM has been deleted from MacStadium VDI, the VM has been unregistered from Citrix Cloud, the desktop is removed from Citrix Workspace, resources have been freed on the Orka host.`}),`\n`,_jsx(Heading,{level:`4`,id:`performance-and-latency-baselines`,children:`Performance and Latency Baselines`}),`\n`,_jsx(_components.p,{children:`Establishing performance baselines helps identify potential points of service degradation, and helps validate that your MacStadium VDI environment meets user expectations. Having a baseline established also provides a reference point for troubleshooting, provides capacity planning data for scaling considerations, provides user experience metrics to measure service quality, and allows for regressions to be detected when adverse changes may occur.`}),`\n`,_jsx(_components.p,{children:`Some metrics to consider measuring are:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`VM deployment time`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`How long does it take from playbook execution to the time a VDA is registered?`}),`\n`,_jsx(_components.li,{children:`To establish a baseline, record the average, minimum, and maximum time across 10+ deployments and set an acceptable target (for example, \u003c5 minutes for cached images).`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Session launch time`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`How long does it take after clicking a desktop in Citrix Workspace to having a usable desktop?`}),`\n`,_jsx(_components.li,{children:`To establish a baseline, test from multiple client locations such as office, remote, or mobile. An example target: \u003c15 seconds for Rendezvous, \u003c10 seconds for a direct connection.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`HDX session quality`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Record the average framerate during normal desktop use`}),`\n`,_jsx(_components.li,{children:`If there is input lag from keyboard/mouse to on-screen updates, how long does it take to resolve? Does the behavior persist upon restart?`}),`\n`,_jsx(_components.li,{children:`How long does it take to launch an application within a desktop session?`}),`\n`,_jsx(_components.li,{children:`Is video playback quality acceptable?`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Network latency`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`What is the round-trip time from client to VM?`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`You can measure this using `,_jsx(_components.code,{children:`ping`}),` or HDX diagnostics`]}),`\n`,_jsx(_components.li,{children:`Test network latency under various conditions and configurations`}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Resource utilization`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`What is the host CPU usage when VMs are running?`}),`\n`,_jsx(_components.li,{children:`What is the average memory consumption per VM?`}),`\n`,_jsx(_components.li,{children:`What disk I/O patterns are observed?`}),`\n`,_jsx(_components.li,{children:`What is the average network bandwidth per session?`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`android-virtual-device-validation`,children:`Android Virtual Device Validation`}),`\n`,_jsx(_components.p,{children:`If your deployment includes Android Virtual Devices, validate the AVD setup before production use.`}),`\n`,_jsx(_components.h5,{children:`AVD creation and status`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Create an AVD for a running VM:`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ansible-playbook`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev/inventory`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` deploy_avd.yml`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vm_name=citrix-test-01\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsx(_components.li,{children:`Confirm the AVD appears in the list with a running status:`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ansible-playbook`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev/inventory`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` list_avds.yml`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vm_name=citrix-test-01\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` AVD listed with status `,_jsx(_components.code,{children:`running`}),`, host, and ADB relay port visible.`]}),`\n`,_jsx(_components.h5,{children:`ADB connectivity from the VM`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Inside the Citrix desktop session on `,_jsx(_components.code,{children:`citrix-test-01`}),`, open Terminal.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`List connected Android devices:`}),`\n`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`adb`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` devices`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` The host-side emulator appears as a connected device (for example, `,_jsx(_components.code,{children:`emulator-5554 device`}),`).`]}),`\n`,_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsx(_components.li,{children:`Confirm ADB shell access:`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`adb`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` shell`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` getprop`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ro.build.version.release`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` Android version string returned without error.`]}),`\n`,_jsx(_components.h5,{children:`ADB relay port reachability`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`From within the VM, verify the relay port is reachable. The default relay port is shown in the `,_jsx(_components.code,{children:`list_avds.yml`}),` output.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nc`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -zv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` localhost`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`relay_por`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` Connection succeeds (`,_jsx(_components.code,{children:`Connection to localhost \u003crelay_port> port [tcp/*] succeeded`}),`).`]}),`\n`,_jsx(_components.h5,{children:`AVD lifecycle`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Stop the AVD and confirm it is no longer listed as running:`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ansible-playbook`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev/inventory`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` avd.yml`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vm_name=citrix-test-01\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"desired_state=stopped\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ansible-playbook`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev/inventory`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` list_avds.yml`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vm_name=citrix-test-01\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsx(_components.li,{children:`Restart the AVD and re-verify ADB connectivity from the VM:`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ansible-playbook`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev/inventory`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` avd.yml`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vm_name=citrix-test-01\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"desired_state=running\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Expected result:`}),` AVD restarts cleanly, ADB reconnects automatically, relay port is reachable again.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Validation and testing","description":"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.","zendesk_id":44332879842587,"keywords":["VDI validation","deployment testing","Citrix VDA verification","performance baseline","VDI acceptance testing"],"href":"/remote-desktop-vdi/operations/validation-and-testing"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Testing Prerequisites","slug":"testing-prerequisites","depth":4,"children":[]},{"title":"End-to-End Connectivity Test via Citrix Workspace","slug":"end-to-end-connectivity-test-via-citrix-workspace","depth":4,"children":[]},{"title":"Desktop Visibility Testing in Citrix Workspace","slug":"desktop-visibility-testing-in-citrix-workspace","depth":4,"children":[]},{"title":"Session Launch Testing in Citrix Workspace","slug":"session-launch-testing-in-citrix-workspace","depth":4,"children":[]},{"title":"Desktop Functionality Testing in Citrix Workspace","slug":"desktop-functionality-testing-in-citrix-workspace","depth":4,"children":[]},{"title":"Peripheral and Feature Testing in Citrix Workspace","slug":"peripheral-and-feature-testing-in-citrix-workspace","depth":4,"children":[]},{"title":"Session Management in Citrix Workspace","slug":"session-management-in-citrix-workspace","depth":4,"children":[]},{"title":"Network Resilience Testing in Citrix Workspace","slug":"network-resilience-testing-in-citrix-workspace","depth":4,"children":[]},{"title":"Multi-User Testing in Citrix Workspace","slug":"multi-user-testing-in-citrix-workspace","depth":4,"children":[]},{"title":"Documenting Test Results","slug":"documenting-test-results","depth":4,"children":[]},{"title":"VM Lifecycle Validation","slug":"vm-lifecycle-validation","depth":4,"children":[]},{"title":"Performance and Latency Baselines","slug":"performance-and-latency-baselines","depth":4,"children":[]},{"title":"Android Virtual Device Validation","slug":"android-virtual-device-validation","depth":4,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"macstadiuminc","siteName":"MacStadium Docs","title":"Validation and testing - MacStadium Docs","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6ae20c4df51b3c0265f963b2","deploymentId":"69af00bd5a04945e653662f0","questionText":"How do I deploy test VMs?","status":"active","generatedBy":"contextual","path":"remote-desktop-vdi/operations/validation-and-testing","createdAt":"2026-10-28T14:53:01.416Z","updatedAt":"2026-10-28T14:53:01.416Z","__v":0},{"_id":"6ae20c4df51b3c0265f963b0","deploymentId":"69af00bd5a04945e653662f0","questionText":"How do I test end-to-end connectivity?","status":"active","generatedBy":"contextual","path":"remote-desktop-vdi/operations/validation-and-testing","createdAt":"2026-10-28T14:53:01.416Z","updatedAt":"2026-10-28T14:53:01.416Z","__v":0},{"_id":"6ae20c4df51b3c0265f963b1","deploymentId":"69af00bd5a04945e653662f0","questionText":"What are the testing prerequisites?","status":"active","generatedBy":"contextual","path":"remote-desktop-vdi/operations/validation-and-testing","createdAt":"2026-10-28T14:53:01.416Z","updatedAt":"2026-10-28T14:53:01.416Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T14:52:56.789Z","originalFileLocation":"remote-desktop-vdi/operations/validation-and-testing.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.\">\u003cmeta data-mint-head name=\"application-name\" content=\"MacStadium Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Validation and testing - MacStadium Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"MacStadium Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://macstadiuminc.mintlify.site/_mintlify/api/og/v2?division=Operations\u0026amp;title=Validation+and+testing\u0026amp;description=Validate+your+Citrix+%2B+Orka+VDI+setup+before+production%3A+end-to-end+connectivity%2C+VM+lifecycle%2C+performance+baseline%2C+and+smoke+tests+via+Citrix+Workspace.\u0026amp;theme=6910d86c8f574b452fff4f65\u0026amp;signature=c4af1e8608db9709b477eae51ddbc2240aacf207125da06a9fcbec7706ba1f91\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Validation and testing - MacStadium Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://macstadiuminc.mintlify.site/_mintlify/api/og/v2?division=Operations\u0026amp;title=Validation+and+testing\u0026amp;description=Validate+your+Citrix+%2B+Orka+VDI+setup+before+production%3A+end-to-end+connectivity%2C+VM+lifecycle%2C+performance+baseline%2C+and+smoke+tests+via+Citrix+Workspace.\u0026amp;theme=6910d86c8f574b452fff4f65\u0026amp;signature=c4af1e8608db9709b477eae51ddbc2240aacf207125da06a9fcbec7706ba1f91\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"MacStadium Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FE9000\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"OeKTGa7HvmEnL1jtMDksZEYQg1LGTk97_JlFSE5nxF4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/remote-desktop-vdi/operations/validation-and-testing.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.macstadium.com/#organization\",\"name\":\"MacStadium Docs\",\"url\":\"https://docs.macstadium.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/macstadiuminc/qJnYHjjgtjKQ73n9/logo/light.png?fit=max\u0026auto=format\u0026n=qJnYHjjgtjKQ73n9\u0026q=85\u0026s=8095707b80300088ba5f7c1cd8363d18\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.macstadium.com#website\",\"name\":\"MacStadium Docs\",\"url\":\"https://docs.macstadium.com\",\"publisher\":{\"@id\":\"https://docs.macstadium.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing#webpage\",\"url\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing\",\"name\":\"Validation and testing\",\"description\":\"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.\",\"dateModified\":\"2026-10-28T14:52:56.789Z\",\"isPartOf\":{\"@id\":\"https://docs.macstadium.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"MacStadium VDI\",\"item\":\"https://docs.macstadium.com/remote-desktop-vdi/overview/what-is-macstadium-vdi\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Operations\",\"item\":\"https://docs.macstadium.com/remote-desktop-vdi/it-admin-onboarding-guide\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Validation and testing\",\"item\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing#article\",\"headline\":\"Validation and testing\",\"name\":\"Validation and testing\",\"description\":\"Validate your Citrix + Orka VDI setup before production: end-to-end connectivity, VM lifecycle, performance baseline, and smoke tests via Citrix Workspace.\",\"url\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing\",\"mainEntityOfPage\":{\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/operations/validation-and-testing#webpage\"},\"dateModified\":\"2026-10-28T14:52:56.789Z\",\"keywords\":\"VDI validation, deployment testing, Citrix VDA verification, performance baseline, VDI acceptance testing\",\"publisher\":{\"@id\":\"https://docs.macstadium.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.macstadium.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"MacStadium Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"MacStadium Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/remote-desktop-vdi/operations/validation-and-testing.md","siteName":"MacStadium Docs","nav":{"global":null,"groups":[{"group":"MacStadium","pages":[{"group":"MacStadium Overview","pages":[{"title":"MacStadium cloud hosting for Apple hardware","href":"/macstadium/macstadium-overview/macstadium-overview"},{"title":"Use these docs with AI tools","href":"/macstadium/macstadium-overview/use-these-docs-with-ai-tools"},{"title":"MacStadium Portal for subscriptions and support","href":"/macstadium/macstadium-overview/macstadium-portal"},{"title":"Viewing your environment in My Cloud","href":"/macstadium/macstadium-overview/ip-plan"}]},{"group":"Account Management","pages":[{"title":"First-Time SSO Login to MacStadium Portal","href":"/macstadium/account-management-and-saml/first-time-sso-login-to-macstadium-portal"},{"title":"Troubleshooting Credential Issues","href":"/macstadium/account-management-and-saml/troubleshooting-credential-issues"},{"title":"Add a new user to your MacStadium account","href":"/macstadium/account-management-and-saml/add-a-new-user"},{"title":"Two-Factor Authentication (2FA)","href":"/macstadium/account-management-and-saml/two-factor-authentication-2fa"},{"title":"SAML single sign-on for MacStadium accounts","href":"/macstadium/account-management-and-saml/saml-sso"},{"title":"Enable SAML SSO with Okta","href":"/macstadium/account-management-and-saml/enable-saml-sso-with-okta"},{"title":"Enable SAML SSO with Microsoft Entra ID","href":"/macstadium/account-management-and-saml/enable-saml-sso-with-azure-active-directory"},{"title":"Enable SAML SSO with Google Workspace Federation","href":"/macstadium/account-management-and-saml/enable-saml-sso-with-google-workspace-federation"}]},{"group":"Billing","pages":[{"title":"MacStadium vendor onboarding and management","href":"/macstadium/billing/vendor-management"},{"title":"Is an annual commitment tied to specific machines?","href":"/macstadium/billing/is-an-annual-commitment-tied-to-specific-machines"},{"title":"Access and download MacStadium invoices","href":"/macstadium/billing/accessing-invoices"},{"title":"Fix a declined credit card on MacStadium","href":"/macstadium/billing/credit-card-declined"},{"title":"Canceling a MacStadium Subscription","href":"/macstadium/billing/canceling-a-macstadium-subscription"}]},{"group":"Legal and Compliance","pages":[{"title":"Master Services Agreement","href":"/macstadium/legal-and-compliance/master-services-agreement"},{"title":"Service Level Agreement","href":"/macstadium/legal-and-compliance/service-level-agreement"},{"title":"Acceptable Use Policy","href":"/macstadium/legal-and-compliance/acceptable-use-policy"},{"title":"Copyright and Trademark Policy","href":"/macstadium/legal-and-compliance/copyright-and-trademark-policy"},{"title":"MacStadium security and compliance overview","href":"/macstadium/legal-and-compliance/security"}]},{"group":"Support","pages":[{"title":"MacStadium support plans and services","href":"/macstadium/support/support"},{"title":"Service desk guide for MacStadium Macs","sidebarTitle":"Service desk guide","href":"/macstadium/support/service-desk-guide"},{"title":"Update regarding CVE-2026-65400","href":"/CVE-2026-65400"},{"title":"MacStadium Support Tiers","href":"/macstadium/support/macstadium-support-tiers"},{"title":"Creating Slack Tickets","hidden":true,"href":"/macstadium/support/creating-slack-tickets"},{"title":"Mac Configuration Assistance","href":"/macstadium/support/mac-configuration-assistance"},{"title":"MacStadium Remote Hands hardware support","href":"/macstadium/support/remote-hands-service"}]}]},{"group":"Orka","pages":[{"group":"Overview","pages":[{"title":"Orka macOS virtualization platform overview","href":"/orka/orka-overview/orka-overview"},{"title":"How Orka manages VMs","sidebarTitle":"How Orka manages VMs","href":"/orka/orka-overview/how-orka-manages-vms"},{"title":"Orka tools, CLI downloads, and CI/CD plugins","href":"/orka/orka-overview/tools-integrations"},{"title":"Orka compatibility matrix for macOS and hardware","href":"/orka/orka-overview/compatibility-matrix"}]},{"group":"Quick Start Guides","pages":[{"title":"Deploy your first VM with the Orka CLI","href":"/orka/quick-start-guides/orka-cli-quick-start"},{"title":"Deploy your first VM with the Orka REST API","href":"/orka/quick-start-guides/orka-api-quick-start"},{"title":"Orka Web UI quick start guide","href":"/orka/quick-start-guides/web-ui-quick-start"},{"title":"Orka CI/CD integrations quick start guide","sidebarTitle":"CI/CD Integrations Quick Start","href":"/orka/quick-start-guides/cicd-integrations-quick-start"}]},{"group":"Cluster Access","pages":[{"title":"Cluster Access Management: Overview","href":"/orka/orka-cluster-access/cluster-access-management-overview"},{"title":"How access works in Orka","sidebarTitle":"How access works","href":"/orka/orka-cluster-access/how-access-works"},{"title":"Orka authentication, OIDC, and RBAC configuration","sidebarTitle":"Authentication and RBAC","href":"/orka/orka-cluster-access/orka-authentication-and-rbac"},{"title":"Understanding Orka Credentials","href":"/orka/orka-cluster-access/understanding-orka-credentials"},{"title":"Customer Portal: Manage Account Users","href":"/orka/orka-cluster-access/customer-portal-manage-account-users"},{"title":"Log in to your Orka cluster for the first time","sidebarTitle":"Access the Cluster","href":"/orka/orka-cluster-access/orka-cluster-access-the-cluster"},{"title":"Manage namespace access to Orka cluster resources","href":"/orka/orka-cluster-access/orka-cluster-manage-access-to-resources"},{"title":"Manage Orka service accounts for CI/CD","href":"/orka/orka-cluster-access/orka-cluster-manage-service-accounts"}]},{"group":"Networking","pages":[{"title":"MSDC Network Requirements","href":"/orka/networking-with-orka-at-macstadium/msdc-network-requirements"},{"title":"Connect to your Orka cluster via VPN","href":"/orka/networking-with-orka-at-macstadium/vpn-connection"},{"title":"Built-In Orka Domains","href":"/orka/networking-with-orka-at-macstadium/built-in-orka-domains"},{"title":"Custom domains and TLS certificates for Orka clusters","sidebarTitle":"External Custom Domains","href":"/orka/networking-with-orka-at-macstadium/external-custom-domains"},{"group":"AWS","pages":[{"title":"Connect AWS to your Orka cluster","href":"/orka/networking-with-orka-at-macstadium/aws-orka-connections"},{"title":"1. AWS Side of the VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/1-aws-side-of-the-vpn-tunnel"},{"title":"2. AWS VPN Tunnel Configuration File","href":"/orka/networking-with-orka-at-macstadium/2-aws-vpn-tunnel-configuration-file"},{"title":"3. Orka side of the AWS VPN tunnel","href":"/orka/networking-with-orka-at-macstadium/3-aws-orka-side-of-the-vpn-tunnel"},{"title":"4. Verifying the AWS VPN tunnel","href":"/orka/networking-with-orka-at-macstadium/4-aws-verifying-the-vpn-tunnel"},{"title":"AWS VPN Tunnel Troubleshooting","href":"/orka/networking-with-orka-at-macstadium/aws-vpn-tunnel-troubleshooting"}]},{"group":"GCP","pages":[{"title":"Connect GCP to your Orka cluster","href":"/orka/networking-with-orka-at-macstadium/gcp-orka-connections"},{"title":"1. GCP Side of the VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/1-gcp-side-of-the-vpn-tunnel"},{"title":"2. GCP VPN Tunnel Configuration File","href":"/orka/networking-with-orka-at-macstadium/2-gcp-vpn-tunnel-configuration-file"},{"title":"3. Orka Side of the GCP VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/3-orka-side-of-the-gcp-vpn-tunnel"},{"title":"4. Verifying the GCP VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/4-verifying-the-gcp-vpn-tunnel"},{"title":"GCP VPN Tunnel Troubleshooting","href":"/orka/networking-with-orka-at-macstadium/gcp-vpn-tunnel-troubleshooting"}]}]},{"group":"DevOps Integrations","pages":[{"title":"Jenkins plugin for Orka macOS build agents","href":"/orka/orka-devops-integrations/jenkins"},{"title":"GitHub Actions integration for Orka","href":"/orka/orka-devops-integrations/github-actions"},{"title":"GitLab CI/CD runners on Orka macOS VMs","sidebarTitle":"GitLab","href":"/orka/orka-devops-integrations/gitlab"},{"title":"Buildkite agents on Orka macOS VMs","sidebarTitle":"Buildkite","href":"/orka/orka-devops-integrations/buildkite"},{"title":"TeamCity plugin for Orka macOS build agents","href":"/orka/orka-devops-integrations/teamcity"},{"title":"Packer plugin for automated Orka image builds","href":"/orka/orka-devops-integrations/packer"},{"title":"Harness CI on Orka: Orka-side setup","sidebarTitle":"Harness","href":"/orka/orka-devops-integrations/harness"},{"title":"Azure DevOps agents on Orka","sidebarTitle":"Azure DevOps","href":"/orka/orka-devops-integrations/azure-devops"},{"title":"Bazel remote build execution for iOS and macOS with Orka","sidebarTitle":"Bazel remote build execution","href":"/orka/orka-devops-integrations/bazel-rbe"},{"title":"Bazel remote build execution for iOS and macOS with Orka: quick start","sidebarTitle":"Bazel remote build execution quick start","href":"/orka/orka-devops-integrations/bazel-rbe-quickstart"},{"title":"AI agent integration with the Orka CLI","sidebarTitle":"Orka CLI agent skill","href":"/orka/orka-devops-integrations/claude-code"}]},{"group":"OCI Images","pages":[{"title":"OCI container images for Orka VMs","href":"/orka/oci-images/oci-images-overview"},{"title":"Manage OCI registry credentials in Orka","href":"/orka/oci-images/oci-images-manage-registry-credentials"},{"title":"Deploy Orka VMs from an OCI image registry","sidebarTitle":"Deploy VMs from OCI images","href":"/orka/oci-images/oci-images-deploy-vms"},{"title":"Save Orka VM changes to a local or OCI image","href":"/orka/oci-images/oci-images-preserve-changes"},{"title":"Building a hardened custom image","href":"/orka/oci-images/building-a-hardened-custom-image"},{"title":"Use Harbor OCI storage with the Orka CLI","href":"/orka/oci-images/using-harbor-oci-storage-with-the-orka-cli"},{"title":"Migrate NFS Orka images to OCI format with Harbor","sidebarTitle":"Migrating NFS Images to OCI with Harbor","href":"/orka/oci-images/orka-self-service-migrating-nfs-images-to-oci-with-harbor"}]},{"group":"Kubernetes","pages":[{"title":"Kubernetes-native Orka resource management","href":"/orka/kubernetes-native/k8s-native-overview"},{"title":"Kubernetes persistent volumes in Orka namespaces","sidebarTitle":"Persistent Volumes","href":"/orka/kubernetes-native/k8s-native-persistent-volumes"},{"title":"Orka Kubernetes custom resource definition reference","href":"/orka/kubernetes-native/k8s-native-orka3-crd-reference"}]},{"group":"CLI Reference","pages":[{"title":"Orka CLI Overview \u0026 Configuration","href":"/orka/orka-cli-reference/orka-cli-overview-configuration"},{"title":"Authentication and User Management","href":"/orka/orka-cli-reference/authentication-and-user-management"},{"title":"Manage macOS VM images with the Orka CLI","href":"/orka/orka-cli-reference/image-management"},{"title":"Orka CLI OCI registry credential commands","href":"/orka/orka-cli-reference/oci-registry-integration"},{"title":"Orka CLI VM config templates and deployment","href":"/orka/orka-cli-reference/vm-deployment-and-configuration"},{"title":"Save, commit, and push Orka VM images with the CLI","href":"/orka/orka-cli-reference/vm-lifecycle-management"},{"title":"Manage Android emulators with the Orka CLI","href":"/orka/orka-cli-reference/emulator-management"},{"title":"Orka node management with the CLI","href":"/orka/orka-cli-reference/node-management"},{"title":"Orka namespace management with the CLI","href":"/orka/orka-cli-reference/namespace-management"},{"title":"Role-Based Access Control (RBAC)","href":"/orka/orka-cli-reference/role-based-access-control-rbac"},{"title":"Orka cluster upgrades with the CLI","sidebarTitle":"Cluster upgrades","href":"/orka/orka-cli-reference/upgrade-management"},{"title":"Orka CLI command quick reference","sidebarTitle":"Command quick reference","href":"/orka/orka-cli-reference/command-quick-reference"},{"title":"Orka CLI output formats and built-in help","href":"/orka/orka-cli-reference/output-formats-and-getting-help"}]},{"group":"Resources","pages":[{"title":"Working with Orka VM metadata and custom tags","href":"/orka/orka-resources/working-with-vm-metadata"},{"title":"Bootstrap VMs with User Data","sidebarTitle":"User Data","href":"/orka/orka-resources/userdata"},{"title":"Orka image caching for faster VM deployments","href":"/orka/orka-resources/image-caching"},{"title":"Shared VM storage for Orka CI artifacts","href":"/orka/orka-resources/shared-vm-storage"},{"title":"Orka Burst for on-demand elastic cluster capacity","href":"/orka/orka-resources/burst"},{"title":"Apple silicon Mac servers in Orka","href":"/orka/orka-resources/apple-silicon-based-support"},{"title":"Android emulators on Orka","href":"/orka/orka-resources/android-emulators"},{"title":"Orka Required URL Rules for Filtering","href":"/orka/orka-resources/orka-required-url-rules-for-filtering"},{"title":"VM access ports","href":"/orka/orka-resources/vm-access-ports"},{"title":"Orka VM Tools for guest services on ARM VMs","href":"/orka/orka-resources/vm-tools"},{"title":"Orka cluster scheduling and VM isolation settings","href":"/orka/orka-resources/cluster-configurations"},{"title":"Consuming Metrics from Prometheus","href":"/orka/orka-resources/consuming-metrics-from-prometheus"},{"title":"Consuming Firewall and Network Metrics","href":"/orka/orka-resources/consuming-firewall-metrics"},{"title":"Resiliency, High Availability, and Disaster Recovery","href":"/orka/orka-resources/resiliency-high-availability-and-disaster-recovery"}]},{"group":"Configuration","pages":[{"title":"Enable GPU passthrough for Orka VMs on Intel nodes","sidebarTitle":"Performance: GPU passthrough","href":"/orka/orka-configuration/performance-gpu-passthrough"}]},{"group":"Compatibility","pages":[{"title":"Orka feature parity across Intel and Apple silicon","sidebarTitle":"Feature parity: Apple hardware","href":"/orka/compatibility/feature-parity-apple-hardware"},{"title":"Orka CLI, API, and Web UI feature parity matrix","href":"/orka/compatibility/feature-parity-orka-tools"},{"title":"Orka performance features by hardware and macOS version","sidebarTitle":"Performance improving features","href":"/orka/compatibility/compatibility-performance-improving-features"}]},{"group":"Desktop","pages":[{"title":"What's new in Orka Desktop 3.1.0","href":"/orka/orka-desktop/orka-desktop-310-release-notes"},{"title":"Orka Desktop 3.0 local macOS virtualization tool","href":"/orka/orka-desktop/welcome-to-orka-desktop-30"}]},{"group":"Engine","pages":[{"title":"Orka Engine standalone macOS VM management","href":"/orka/orka-engine/orka-engine-30"},{"title":"Managing your Orka license","href":"/orka/orka-engine/managing-your-orka-license"}]},{"group":"On AWS and On-Prem","pages":[{"title":"Orka on AWS architecture and deployment overview","href":"/orka/orka-on-aws-and-on-prem/orka-on-aws-getting-started"},{"title":"Access Orka on AWS in a private VPC with SSM","href":"/orka/orka-on-aws-and-on-prem/orka-on-aws-vpc-access"},{"title":"Risk Assessment and Mitigation Plan for Orka on AWS","href":"/orka/orka-on-aws-and-on-prem/risk-assessment-and-mitigation-plan-for-orka-on-aws"},{"title":"Orka On-Prem architecture and networking overview","href":"/orka/orka-on-aws-and-on-prem/orka-on-prem-getting-started"},{"title":"Set up the most-allocated scheduler on a self-managed control plane","sidebarTitle":"Most-allocated scheduler","href":"/orka/orka-on-aws-and-on-prem/most-allocated-scheduler-self-managed"},{"title":"Orka Anywhere On-Prem: Troubleshooting VM Deployments","href":"/orka/orka-on-aws-and-on-prem/orka-on-prem-troubleshooting"},{"title":"Using Bridge Networking with Orka 3.5.0","href":"/orka/orka-on-aws-and-on-prem/using-bridge-networking-with-orka-350"}]},{"group":"Cluster Migration","pages":[{"title":"Orka 3.1+ backward compatibility for 2.4.x and 3.0.x","href":"/orka/orka-cluster-migration-from-24-3x/24x-and-30x-to-31x-and-above-backward-compatibility"},{"title":"What persists when migrating Orka 2.4.x to 3.0.0","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-what-persists"},{"title":"Post-migration tasks after upgrading Orka 2.4.x to 3.0.0","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-after-the-migration"},{"title":"Orka 2.4.x to 3.0.0 CLI command mapping","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-cli-mapping"},{"title":"Orka 2.4.x to 3.0.0 API endpoint mapping","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-api-mapping"}]},{"group":"Upgrade Guides","pages":[{"title":"How to upgrade your Orka cluster","href":"/orka/orka-upgrades-and-release-notes/orka-upgrades"},{"title":"Run guided Orka cluster upgrades with Upgrade Service","sidebarTitle":"Orka Upgrade Service","href":"/orka/orka-upgrades-and-release-notes/orka-upgrade-service"},{"title":"Upgrade a self-managed Orka Anywhere cluster","sidebarTitle":"Upgrading Orka Anywhere","href":"/orka/orka-upgrades-and-release-notes/upgrading-orka-anywhere"},{"title":"Upgrading Orka on AWS","href":"/orka/orka-upgrades-and-release-notes/upgrading-orka-on-aws"},{"title":"Kubernetes upgrade guide","href":"/orka/orka-upgrades-and-release-notes/kubernetes-upgrade-guide"}]},{"group":"Release Notes","pages":[{"title":"Orka release notes","href":"/orka/orka-upgrades-and-release-notes/orka-release-notes"},{"title":"Orka 3.x release notes","href":"/orka/orka-upgrades-and-release-notes/orka-3-release-notes"},{"title":"Orka component versions by release","sidebarTitle":"Component versions","href":"/orka/orka-upgrades-and-release-notes/orka-component-versions"},{"title":"Orka known issues and fixes by version","sidebarTitle":"Known issues and fixes by version","href":"/orka/orka-upgrades-and-release-notes/known-issues-by-version"}]}]},{"group":"MacStadium VDI","pages":[{"group":"Overview","pages":[{"title":"What is MacStadium VDI: macOS DaaS Hosting","sidebarTitle":"What is MacStadium VDI","href":"/remote-desktop-vdi/overview/what-is-macstadium-vdi"},{"title":"MacStadium VDI architecture and deployment models","href":"/remote-desktop-vdi/overview/architecture"},{"title":"Use cases","href":"/remote-desktop-vdi/overview/use-cases"},{"title":"Prerequisites","href":"/remote-desktop-vdi/overview/prerequisites"},{"title":"Choose your deployment model","href":"/remote-desktop-vdi/overview/choose-your-deployment-model"},{"title":"VDI on bare metal Mac","href":"/remote-desktop-vdi/overview/bare-metal-mac-vdi"},{"title":"MacStadium VDI business outcomes and use cases","href":"/remote-desktop-vdi/overview/business-outcomes-use-cases"}]},{"group":"Getting Started","pages":[{"title":"Getting started: MSDC-hosted","href":"/remote-desktop-vdi/getting-started/msdc-hosted"},{"title":"Self-hosted MacStadium VDI deployment guide","href":"/remote-desktop-vdi/getting-started/self-hosted"}]},{"group":"Configuration","pages":[{"title":"Ansible playbook implementation","href":"/remote-desktop-vdi/configuration/ansible-playbook-implementation"},{"title":"Citrix DaaS configuration","href":"/remote-desktop-vdi/configuration/citrix-daas-configuration"},{"title":"VDI golden image management","href":"/remote-desktop-vdi/configuration/image-management"},{"title":"MDM enrollment for MacStadium VDI desktops","href":"/remote-desktop-vdi/configuration/mdm-enrollment"},{"title":"Android virtual devices","href":"/remote-desktop-vdi/configuration/android-virtual-devices"},{"title":"Apple Business Manager and MDM with MacStadium","href":"/remote-desktop-vdi/configuration/apple-business-manager-and-mobile-device-management-with-macstadium"},{"title":"MacStadium VDI customer environment tips","href":"/remote-desktop-vdi/configuration/customer-environment-tips"},{"title":"USB passthrough guide","href":"/remote-desktop-vdi/configuration/usb-passthrough-guide"},{"title":"Advanced configuration","href":"/remote-desktop-vdi/configuration/advanced-configuration"}]},{"group":"Operations","pages":[{"title":"IT administrator onboarding guide","description":"IT admin guide for MacStadium VDI. Covers Ansible, Citrix Cloud, and Orka Engine interfaces, user provisioning, image management, and daily operations.","href":"/remote-desktop-vdi/it-admin-onboarding-guide"},{"title":"Validation and testing","href":"/remote-desktop-vdi/operations/validation-and-testing"},{"title":"VDI production rollout checklist","description":"Transition MacStadium VDI from testing to production. Covers user access policies, golden image readiness, monitoring setup, and team training requirements.","href":"/remote-desktop-vdi/operations/production-rollout"},{"title":"MacStadium VDI day-2 operations guide","href":"/remote-desktop-vdi/operations/day-2-operations-guide"},{"title":"Monitoring and observability","href":"/remote-desktop-vdi/operations/monitoring"},{"title":"Incident response and change management","href":"/remote-desktop-vdi/operations/incident-response"},{"title":"Bulk VM lifecycle management","href":"/remote-desktop-vdi/operations/bulk-vm-lifecycle"},{"title":"Deprovision and recover Mac hosts with Jamf Pro","href":"/remote-desktop-vdi/operations/deprovision-and-recover-mac-hosts"}]},{"group":"Reference","pages":[{"title":"MacStadium VDI known issues and limitations","href":"/remote-desktop-vdi/reference/known-issues"},{"title":"Networking requirements","href":"/remote-desktop-vdi/reference/networking-requirements"},{"title":"Ansible quick reference","href":"/remote-desktop-vdi/reference/ansible-quick-reference"},{"title":"MacStadium VDI troubleshooting quick reference","href":"/remote-desktop-vdi/reference/troubleshooting-quick-reference"},{"title":"Shared responsibility guide","href":"/remote-desktop-vdi/reference/shared-user-responsibility-guide-for-macstadium-customers"}]},{"group":"Legacy (Cloud Access)","pages":[{"title":"MacStadium Cloud Access with Teradici PCoIP","href":"/remote-desktop-vdi/cloud-access-legacy/cloud-access"},{"title":"Getting Started with Cloud Access","href":"/remote-desktop-vdi/cloud-access-legacy/getting-started-with-cloud-access"},{"title":"Cloud Access Customer Environment Tips","href":"/remote-desktop-vdi/cloud-access-legacy/cloud-access-customer-environment-tips"},{"title":"Connect to Your Cloud (via VPN)","href":"/remote-desktop-vdi/cloud-access-legacy/connect-to-your-cloud-via-vpn"},{"title":"Cloud Access troubleshooting","href":"/remote-desktop-vdi/cloud-access-legacy/cloud-access-troubleshooting"},{"title":"Connect to Your Cloud (SSH)","href":"/remote-desktop-vdi/cloud-access-legacy/connect-to-your-cloud-ssh"},{"title":"Connect to Your Cloud (Windows)","href":"/remote-desktop-vdi/cloud-access-legacy/connect-to-your-cloud-windows"},{"title":"Setup VPN using Cisco AnyConnect","href":"/remote-desktop-vdi/cloud-access-legacy/setup-vpn-using-cisco-anyconnect"}]},{"group":"Release Notes","pages":[{"title":"MacStadium VDI 1.0 release notes","href":"/remote-desktop-vdi/macstadium-vdi-deployment/vdi-10-release-notes"}]}]},{"group":"IaaS","pages":[{"group":"Overview","pages":[{"title":"Bare Metal Mac Hosting: Infrastructure as a Service (IaaS)","sidebarTitle":"IaaS Overview","href":"/iaas/iaas-overview/infrastructure-as-a-service-iaas"},{"title":"MacStadium data center locations and latency testing","sidebarTitle":"Data Center Locations","href":"/iaas/iaas-overview/data-center-locations"}]},{"group":"Bare Metal Macs","pages":[{"title":"Connecting to your Mac for the first time","href":"/iaas/bare-metal-macs/connecting-to-your-mac-for-the-first-time"},{"title":"Bare metal Mac configurations","href":"/iaas/bare-metal-macs/mac-mini-comparison-chart"},{"title":"MacStadium Bare Metal Mac Benchmarks","href":"/iaas/bare-metal-macs/macstadium-bare-metal-mac-benchmarks"},{"title":"Common macOS CI/CD tools for MacStadium","href":"/iaas/bare-metal-macs/common-tools"},{"title":"Disabling Activation Lock and Find My on Mac","href":"/iaas/bare-metal-macs/2018-mac-mini-deactivation-process"}]},{"group":"Networking","pages":[{"title":"MacStadium IaaS networking overview","href":"/iaas/networking/networking-overview"},{"group":"Cisco Firewalls","pages":[{"title":"MacStadium network onboarding form for new customers","sidebarTitle":"Network Onboarding Form","href":"/iaas/cisco-firewalls/network-onboarding-form"},{"title":"Prepare the VPN Configuration for Input into Cisco ASA/ASAv","href":"/iaas/cisco-firewalls/prepare-the-vpn-configuration-for-input-into-cisco-asaasav"},{"title":"Cisco firewall models, specs, and capabilities","sidebarTitle":"Network Firewalls: Overview","href":"/iaas/cisco-firewalls/network-firewalls-overview"},{"title":"Firewall Upgrade Maintenance: What to Expect","href":"/iaas/cisco-firewalls/firewall-upgrade-maintenance-what-to-expect"},{"title":"Logging into Cisco Firewall","href":"/iaas/cisco-firewalls/logging-into-cisco-firewall"},{"title":"Creating Local User Accounts on a Cisco ASA","href":"/iaas/cisco-firewalls/creating-local-user-accounts-on-a-cisco-asa"},{"title":"Backup and Restore Firewall Config using ASDM","href":"/iaas/cisco-firewalls/backup-and-restore-firewall-config-using-asdm"},{"title":"Managing Cisco ASA firewall interfaces via ASDM","href":"/iaas/cisco-firewalls/managing-interfaces"},{"title":"Network Firewalls Configuration","href":"/iaas/cisco-firewalls/network-firewalls-configuration"},{"title":"Allowing Specific IPs to Access MacStadium via Internet","href":"/iaas/cisco-firewalls/allowing-specific-ips-to-access-macstadium-via-internet"},{"title":"Checking the Firewall Version","href":"/iaas/cisco-firewalls/checking-the-firewall-version"},{"title":"Changing the VPN \u0026 Firewall Password","href":"/iaas/cisco-firewalls/changing-the-vpn-firewall-password"},{"title":"Firewall Change Request Form","href":"/iaas/cisco-firewalls/firewall-change-request-form"},{"title":"Network Firewalls Mac Mini Connect","href":"/iaas/cisco-firewalls/network-firewalls-mac-mini-connect"},{"title":"Network Firewalls for CI Build Node: Homebrew","href":"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-homebrew"},{"title":"Network Firewalls for CI Build Node: Ansible","href":"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible"},{"title":"Remote-access VPN through Cisco ASAv network firewalls","sidebarTitle":"Remote-access VPN","href":"/iaas/cisco-firewalls/network-firewalls-cloud-connect-vpn"}]},{"group":"Connecting to Other Clouds","pages":[{"title":"Connect third-party clouds to MacStadium","href":"/iaas/connecting-to-other-clouds/other-clouds"},{"title":"Cloud Connect circuits to AWS, Azure, and Google Cloud","sidebarTitle":"Cloud Connect","href":"/iaas/connecting-to-other-clouds/cloud-connect"},{"title":"Private Cloud Networking Setup","href":"/iaas/connecting-to-other-clouds/private-cloud-networking-setup"},{"title":"Site-to-Site VPN Config","href":"/iaas/connecting-to-other-clouds/site-to-site-vpn-config"},{"group":"AWS","pages":[{"title":"AWS-to-MacStadium VPN troubleshooting","href":"/iaas/aws/aws-troubleshooting"},{"title":"AWS-to-MacStadium VPN networking setup","href":"/iaas/aws/aws-networking-setup"},{"title":"Site-to-site VPN configuration with AWS","href":"/iaas/aws/site-to-site-vpn-configuration-with-aws"},{"title":"AWS VPN Config for Cisco ASA/ASAv","href":"/iaas/aws/aws-vpn-config-for-cisco-asaasav"},{"title":"Verify your AWS-to-MacStadium VPN connection","href":"/iaas/aws/verify-aws"}]},{"group":"Azure","pages":[{"title":"Azure-to-MacStadium VPN networking setup","href":"/iaas/azure/azure-networking-setup"},{"title":"Azure-to-MacStadium VPN troubleshooting","href":"/iaas/azure/azure-troubleshooting"},{"title":"Site-to-Site VPN Configuration with Azure","href":"/iaas/azure/site-to-site-vpn-configuration-with-azure"},{"title":"Azure VPN Config for Cisco ASA/ASAv","href":"/iaas/azure/azure-vpn-config-for-cisco-asaasav"},{"title":"Verify your Azure-to-MacStadium VPN connection","href":"/iaas/azure/verify-azure"}]},{"group":"Google Cloud Platform","pages":[{"title":"GCP-to-MacStadium VPN networking setup","href":"/iaas/google-cloud-platform/google-cloud-networking-setup"},{"title":"Site-to-site VPN configuration with GCP","href":"/iaas/google-cloud-platform/site-to-site-vpn-configuration-with-gcp"},{"title":"GCP-to-MacStadium VPN troubleshooting","href":"/iaas/google-cloud-platform/gcp-troubleshooting"},{"title":"GCP VPN Config for Cisco ASA/ASAv","href":"/iaas/google-cloud-platform/gcp-vpn-config-for-cisco-asaasav"},{"title":"Verify your GCP-to-MacStadium VPN connection","href":"/iaas/google-cloud-platform/verify-gcp"}]}]}]},{"group":"Storage","pages":[{"title":"Private Cloud Network Attached Storage","href":"/iaas/storage/private-cloud-network-attached-storage"},{"title":"Private Cloud VM restorable snapshots","href":"/iaas/storage/restorable-snapshots"}]},{"group":"x86 VMs (Private Cloud VMs)","pages":[{"title":"Private Cloud x86 VMs","href":"/iaas/x86-vms-private-cloud-vms/private-cloud-x86-vms"},{"title":"VM Creation and OS Installation","href":"/iaas/x86-vms-private-cloud-vms/vm-creation-and-os-installation"},{"title":"Creating a New VM with a Recipe","href":"/iaas/x86-vms-private-cloud-vms/creating-a-new-vm-with-a-recipe"},{"title":"Creating a New VM Manually","href":"/iaas/x86-vms-private-cloud-vms/creating-a-new-vm-manually"},{"title":"Manual Windows Installation","href":"/iaas/x86-vms-private-cloud-vms/manual-windows-installation"},{"title":"Windows 2022 Installation","href":"/iaas/x86-vms-private-cloud-vms/windows-2022-installation"}]},{"group":"FAQs","pages":[{"title":"Troubleshooting Connectivity Issues","href":"/iaas/iaas-faqs/troubleshooting-connectivity-issues"},{"title":"MacStadium REST API for server management","href":"/iaas/iaas-faqs/macstadium-api"},{"title":"Hard reboot a MacStadium Mac from the portal","href":"/iaas/iaas-faqs/reboot-your-mac"},{"title":"Root and admin access on MacStadium Mac servers","href":"/iaas/iaas-faqs/do-i-have-root-and-admin-access-to-subscription-based-mac-servers"},{"title":"Can I change the OS on my server from macOS to Linux?","href":"/iaas/iaas-faqs/can-i-change-the-os-on-my-server-from-macos-to-linux"},{"title":"Fix high CPU from coreaudiod and launchd on macOS","sidebarTitle":"coreaudiod and launchd high CPU","href":"/iaas/iaas-faqs/why-are-coreaudiod-and-launchd-using-a-high-amount-of-resources"},{"title":"What is instant provisioning and how long does it take?","href":"/iaas/iaas-faqs/what-is-instant-provisioning-and-how-long-does-it-take"},{"title":"How do I order multiple servers at one time?","href":"/iaas/iaas-faqs/how-do-i-order-multiple-servers-at-one-time"},{"title":"How do I find the hardware serial number for my service?","href":"/iaas/iaas-faqs/how-do-i-find-the-hardware-serial-number-for-my-service"},{"title":"Can I attach an external drive to my Mac?","href":"/iaas/iaas-faqs/can-i-attach-an-external-drive-to-my-mac"},{"title":"How do I disable SIP on my Mac?","href":"/iaas/iaas-faqs/how-do-i-disable-sip-on-my-mac"}]}]}]},"basePath":"","title":"Validation and testing - MacStadium Docs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":[],"chunks":[]}