ref:main

Traceability Matrix

Requirement Title Tests Coverage PRs Implementation
REQ-AUD-001 Guest audio output streamed to Moonlight
passed QemuAudioMixerTest.AppliesVolumeAndMutePerChannel
passed QemuAudioMixerTest.CloseWakesBlockedReaders
passed QemuAudioMixerTest.ConvertsS16le44100StereoToFloat48000Frames
passed QemuAudioMixerTest.DropsTheOldestAudioWhenTheReaderFallsBehind
passed QemuAudioMixerTest.KeepsWaitingThroughNormalWriteJitterWithContinuousAudio
passed QemuAudioMixerTest.MixesMultipleStreams
passed QemuAudioMixerTest.ProducesPacedSilenceOnUnderrunWithContinuousAudio
passed QemuAudioMixerTest.ReadsOnlyAudioThatEveryPlayingStreamWrote
passed QemuAudioMixerTest.RemixesStereoIntoSurroundLayouts
passed QemuAudioMixerTest.RestartsStreamsAndIgnoresUnusableOnes
passed QemuAudioMixerTest.WaitsOnUnderrunWithoutContinuousAudio
passed QemuAudioTest.AudioControlIsUsedOnlyWithQemuCapture
passed QemuAudioTest.FiniAndDisconnectEndTheStreamAndReconnectWorks
passed QemuAudioTest.GuestVolumeSurvivesTheNextStreamingSession
passed QemuAudioTest.LaterMicrophonesStartWithTheCurrentGuestStreamsAndVolume
passed QemuAudioTest.MicrophoneDeliversGuestS16le44100StereoAsFloat48000Frames
passed QemuAudioTest.MicrophoneMixesGuestStreams
passed QemuAudioTest.MicrophoneRemixesToSurroundAndAppliesGuestVolume
passed QemuAudioTest.MicrophoneUnderrunTimesOutOrPlaysSilenceWhenContinuous
passed QemuAudioTest.SessionFailsWithoutQemuAudio
passed QemuAudioTest.SessionRegistersAnAudioOutListenerAndDeliversEveryCall
passed QemuAudioTest.SessionRetriesWhileQemuStillHoldsTheClosedListener
passed QemuChannelMatrixTest.MapsGuestLayoutsToSunshineSpeakers
passed QemuPcmTest.ConvertsEveryIntegerAndFloatLayout
passed QemuPcmTest.ValidatesAndDescribesLayouts
passed QemuResamplerTest.Converts44100To48000KeepingFrequencyLevelAndContinuity
passed QemuResamplerTest.FiltersFrequenciesAboveTheOutputNyquistWhenDownsampling
passed QemuResamplerTest.PassesEqualRatesThroughAndResets
covered No linked PRs None
REQ-AUD-002 Client microphone delivered to guest No linked tests no tests No linked PRs None
REQ-CAP-001 Connect to QEMU D-Bus display and discover VM consoles
passed QemuCaptureTest.FailsWhenQemuIsUnreachable
passed QemuCaptureTest.RejectsUnsupportedMemoryType
passed QemuCaptureTest.ResizeRequestsReinit
passed QemuCaptureTest.UnknownConsoleFallsBackToFirstGraphicConsole
passed QemuCaptureTest.UsesConsoleSizeWhenNoScanoutArrives
passed QemuCaptureTest.VerifyAndListGraphicConsoles
passed QemuCaptureTest.VmGoneRequestsReinit
passed QemuFrameStoreTest.DisconnectWakesWaitersAndIsReported
passed QemuSessionRetryTest.ReportsAnUnreachableVmOnceUntilItAnswers
passed QemuSessionTest.ConnectDiscoversVmAndConsoles
passed QemuSessionTest.ConnectFailsForUnreachableAddress
passed QemuSessionTest.ConnectFailsWhenQemuDoesNotOwnTheName
passed QemuSessionTest.DeliversDisableAndCursor
passed QemuSessionTest.DeliversScanoutAndUpdate
passed QemuSessionTest.DeliversSharedMapScanoutWithDescriptor
passed QemuSessionTest.DestroyingRegistrationClosesListenerAndStopsCallbacks
passed QemuSessionTest.FindConsoleByIdLabelOrDefault
passed QemuSessionTest.RegisterListenerAdvertisesUnixMap
passed QemuSessionTest.RegisterListenerFailsForUnknownConsole
passed QemuSessionTest.ReportsListenerDisconnectWhenQemuDropsIt
passed QemuSessionTest.SessionNotAliveWhenBusGoesAway
passed QemuSessionTest.SessionNotAliveWhenQemuReleasesName
passed QemuSessionTest.SupportsMultipleListenersAndReregistration
covered No linked PRs None
REQ-CAP-002 Capture shared-memory scanouts
passed QemuCaptureTest.AllocatesBgrxImagesAndBlackDummy
passed QemuCaptureTest.CapturesScanoutFrames
passed QemuCaptureTest.PushesOnlyWhenTheGuestChangesTheFrame
passed QemuFdTest.OwnsAndReleasesDescriptor
passed QemuFrameStoreTest.ConvertsR5G6B5ScanoutUpdateAndMap
passed QemuFrameStoreTest.DisableBlanksFrame
passed QemuFrameStoreTest.IgnoresUnsupportedFormatAndShortData
passed QemuFrameStoreTest.ReportsSizeChange
passed QemuFrameStoreTest.ScanoutConvertsAllSupportedFormats
passed QemuFrameStoreTest.ScanoutCopiesX8R8G8B8WithStridePadding
passed QemuFrameStoreTest.SharedMapRejectsBadDescriptorOrGeometry
passed QemuFrameStoreTest.SharedMapScanoutAndDamage
passed QemuFrameStoreTest.UpdateBlitsDamageRectangleAndClips
passed QemuPixelFormatTest.ConvertsEveryPackedFormatQemuEmits
passed QemuPixelFormatTest.MapsDrmFourccToPixman
passed QemuPixelFormatTest.RejectsNonRgbFormats
passed QemuPixelFormatTest.UsesCopyAndSwapFastPaths
passed QemuSessionTest.RejectedSharedMapScanoutReturnsAnError
covered No linked PRs None
REQ-CAP-003 Zero-copy DMABUF scanouts into VAAPI and CUDA encoders
passed QemuCaptureTest.GlEncodersTakeTheCursorInDisplayCoordinates
passed QemuCaptureTest.GpuEncoderUploadsSharedMemoryAndSwitchesToDmabuf
passed QemuCaptureTest.SoftwareEncoderReadsDmabufBackOrFails
passed QemuCaptureTest.SoftwareEncoderReinitsWhenQemuSwitchesToAnUnreadableDmabuf
passed QemuCaptureTest.VaapiRequiresQemuToRenderOnTheEncoderGpu
passed QemuCaptureTest.ZeroCopyDisplayHandsDmabufDescriptorsToTheEncoder
skipped QemuDmabufGpuTest.ImportsCropsAndFlipsBottomUpScanout
passed QemuDmabufGpuTest.VulkanCropsAndFlipsBottomUpScanoutLikeQemu
passed QemuFrameStoreTest.DmabufFramesDuplicateDescriptorsAndTrackBuffers
passed QemuFrameStoreTest.DmabufReadbackCropsFlipsAndFollowsDamage
passed QemuFrameStoreTest.DmabufRejectsBadGeometryAndUnreadableLayouts
passed QemuFrameStoreTest.DmabufWithoutReadbackKeepsNoFrameInSystemMemory
passed QemuPixelFormatTest.MapsDrmFourccToPixman
passed QemuRenderNodeTest.ComparesDevicesAndReadsDrivers
passed QemuRenderNodeTest.DefaultNodeIsTheFirstRenderCharacterDevice
passed QemuRenderNodeTest.FindsRendernodeOptionOnTheCommandLine
passed QemuRenderNodeTest.ReadsProcessCommandLine
passed QemuSessionTest.DeliversDmabufScanoutAndDamage
passed QemuSessionTest.DeliversMultiPlaneDmabuf2Scanout
passed QemuSessionTest.ReportsQemuProcessId
partial No linked PRs None
REQ-CAP-004 Survive guest mode changes, Disable, and reboot
passed QemuCaptureTest.DisableShowsBlackFrameAndKeepsCapturing
passed QemuCaptureTest.GpuEncoderUploadsSharedMemoryAndSwitchesToDmabuf
passed QemuCaptureTest.SoftwareEncoderReinitsWhenQemuSwitchesToAnUnreadableDmabuf
passed QemuCaptureTest.SurvivesGuestRebootSequence
covered No linked PRs None
REQ-CAP-005 Composite guest cursor into the stream
passed QemuCaptureTest.CompositesGuestCursorWhenRequested
passed QemuCaptureTest.GlEncodersTakeTheCursorInDisplayCoordinates
passed QemuFrameStoreTest.BlendsCursorWithHotSpotAlphaAndClipping
passed QemuFrameStoreTest.CursorStateCopiesPixelsOnlyWhenTheImageChanged
covered No linked PRs None
REQ-CAP-006 Selectable via capture = qemu config
passed QemuCaptureTest.MultiHeadGuestStreamsOneConsolePerDisplay
passed QemuCaptureTest.OutputNameSelectsConsoleByIdOrLabel
passed QemuSessionTest.ConsoleNamesMatchOutputNameByIdOrLabel
covered No linked PRs None
REQ-CAP-007 VM renders at the size the client streams
passed QemuCaptureTest.AsksTheVmToRenderAtTheSizeTheClientStreams
passed QemuCaptureTest.DoesntAskAgainOnceTheVmRendersAtThatSize
passed QemuCaptureTest.LeavesTheVmsSizeAloneWhenResizingIsOff
passed QemuCaptureTest.PutsTheVmsSizeBackWhenStreamingStops
passed QemuCaptureTest.StreamsTheVmsOwnSizeWhenItIgnoresTheRequest
covered No linked PRs None
REQ-CMP-001 Unchanged Sunshine behavior when QEMU backend is not selected
passed MdnsServiceNameTest.OtherCaptureMethodsAdvertiseTheHostNameAsBefore
passed QemuAudioTest.AudioControlIsUsedOnlyWithQemuCapture
passed QemuInputTest.PenAndTouchFollowLibvirtualhidWithOtherCaptures
passed QemuInputTest.PlatformInputDispatchesToQemuOnlyWithQemuCapture
passed QemuNotSelectedTest.NeverConnectsUnlessCaptureIsQemu
passed QemuNotSelectedTest.SelectingQemuDoesConnect
covered No linked PRs None
REQ-DEP-001 Multiple VMs streamable from one host
passed MdnsServiceNameTest.FollowsSunshineNameSoInstancesOnOneHostDiffer
covered No linked PRs None
REQ-DEP-002 systemd template unit and libvirt integration
passed QemuDisplayAddressTest.ParsesBusQmpAndLibvirtAddresses
passed QemuDisplayAddressTest.RejectsAddressesWithoutSocketOrDomain
passed QemuLibvirtTest.FindsTheDbusGraphicsDeviceInDomainXml
passed QemuLibvirtTest.ReportsLibvirtAndDomainErrors
passed QemuLibvirtTest.ReportsTheDomainsTouchDevice
passed QemuLibvirtTest.UsesThePrivateBusOfABusModeDomain
passed QemuP2pTest.PeerSessionDiscoversConsolesAndStreams
passed QemuP2pTest.PeerSessionFailsWhenNoQemuAnswers
passed QemuP2pTest.PeerSessionNotAliveWhenQemuClosesTheConnection
passed QemuP2pTest.PeerSessionRegistersAudioListener
passed QemuP2pTest.QmpAddClientConnectsThroughTheMonitor
passed QemuP2pTest.QmpAddClientFailsWithoutMonitorOrGreeting
passed QemuP2pTest.QmpAddClientReportsQemuErrors
passed QemuP2pTest.QmpAddClientTimesOutWhileAnotherClientHoldsTheMonitor
passed QemuP2pTest.SharedSessionCallersShareOneConnectionAttempt
passed QemuP2pTest.SharedSessionReconnectsThroughQmpAfterQemuDropsTheClient
covered No linked PRs None
REQ-DEP-003 VMs selectable as Moonlight apps from one instance
passed QemuCaptureTest.StreamsTheVmTheAppSelected
covered No linked PRs None
REQ-DEP-004 Pairing completable from the command line No linked tests stale No linked PRs None
REQ-E2E-001 Primary journey: Moonlight streams a QEMU VM with no guest agent
passed QemuCaptureTest.CapturesScanoutFrames
covered No linked PRs None
REQ-INP-001 Keyboard input delivered to guest
passed QemuInputTest.InputNeverWaitsForABusyQemuAndKeepsItsOrder
passed QemuInputTest.KeysHeldByTwoVirtualKeysAreReleasedWithTheLastOne
passed QemuInputTest.KeysWithoutAQemuKeyAndTextAreIgnored
passed QemuInputTest.PlatformInputDispatchesToQemuOnlyWithQemuCapture
passed QemuInputTest.ReconnectsWhenTheVmComesBack
passed QemuInputTest.SendsToTheCapturedConsole
passed QemuInputTest.SessionSendsConsoleInputCallsInOrder
passed QemuInputTest.SessionTracksIsAbsoluteAndConsoleSize
passed QemuInputTest.StreamingStopReleasesEverythingHeldInTheGuest
passed QemuInputTest.TypesALetterAndAShiftedLetter
passed QemuKeymapTest.CodesWithoutAKeyHaveNoMapping
passed QemuKeymapTest.EveryMappedKeyDecodesToTheSameLinuxKeyInQemu
passed QemuKeymapTest.MapsMediaBrowserAndExtraKeys
passed QemuKeymapTest.MapsThe104KeyUsLayout
passed QemuKeymapTest.SideLessModifiersUseTheLeftKey
covered No linked PRs None
REQ-INP-002 Mouse input delivered to guest
passed QemuInputTest.AbsoluteMouseBecomesRelativeMotionFromTheGuestPointer
passed QemuInputTest.AbsoluteMouseIsScaledToConsolePixels
passed QemuInputTest.FollowsTheGuestSwitchingBetweenAbsoluteAndRelative
passed QemuInputTest.InputNeverWaitsForABusyQemuAndKeepsItsOrder
passed QemuInputTest.MoonlightButtonsMapToQemuButtons
passed QemuInputTest.ReconnectsWhenTheVmComesBack
passed QemuInputTest.RelativeMouseGoesToARelativeGuest
passed QemuInputTest.RelativeMouseMovesATrackedPointerOnAnAbsoluteGuest
passed QemuInputTest.RelativeMouseOnAnAbsoluteGuestIgnoresMouseSetReportsOfOlderPositions
passed QemuInputTest.ScrollSendsOneWheelStepPer120UnitsAndKeepsTheRest
passed QemuInputTest.SendsToTheCapturedConsole
passed QemuInputTest.SessionSendsConsoleInputCallsInOrder
passed QemuInputTest.SessionTracksIsAbsoluteAndConsoleSize
passed QemuInputTest.StreamingStopReleasesEverythingHeldInTheGuest
covered No linked PRs None
REQ-INP-003 Touch input delivered to guest
passed QemuInputTest.AdvertisesPenAndTouchWithQemuCapture
passed QemuInputTest.PenAndTouchFollowLibvirtualhidWithOtherCaptures
passed QemuInputTest.PenDrivesTheMouse
passed QemuInputTest.PlatformInputDispatchesToQemuOnlyWithQemuCapture
passed QemuInputTest.StreamingStopReleasesEverythingHeldInTheGuest
passed QemuInputTest.TouchContactsBeyondMaxSlotsAreDropped
passed QemuInputTest.TouchContactsGetTheLowestFreeSlot
passed QemuInputTest.TouchDrivesTheMouseWhenTheTouchDeviceIsUnknown
passed QemuInputTest.TouchDrivesTheMouseWhenTheVmHasNoTouchDevice
passed QemuInputTest.TouchWithoutMultiTouchDrivesTheMouse
passed QemuLibvirtTest.ReportsTheDomainsTouchDevice
passed QemuSessionTest.FindsTheTouchDeviceOnQemusCommandLine
passed QemuVmDevicesTest.FindsMultitouchDeviceOnTheCommandLine
passed QemuVmDevicesTest.FindsTouchInputInDomainXml
passed QemuVmDevicesTest.IgnoresOtherDevicesAndMentionsElsewhere
covered No linked PRs None
REQ-INP-004 Gamepad input for Linux guests No linked tests no tests No linked PRs None
REQ-NFR-001 Capture-to-packet latency budget
passed QemuCaptureTest.BurstsOfDamagePushAtMostOneFramePerInterval
passed QemuCaptureTest.NoDamageRepeatsNoFrames
passed QemuCaptureTest.PushesDamageWithinMillisecondsNotAtTheNextTick
passed QemuFrameStoreTest.DmabufWithoutReadbackKeepsNoFrameInSystemMemory
passed QemuFrameStoreTest.WaitForChangeWakesOnDamageAndTimesOut
covered No linked PRs None