fangorn/sunshine-qemu
public
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 |