mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-22 06:28:04 +02:00
feat: security overhaul (proxy ssrf fix, streaming sanitization, docker optimization)
This commit is contained in:
1 parent
6d87ada2b8
commit
8df9a37baa
810 files changed
+131090
-151
No files matched your search
@@ -0,0 +1,319 @@
|
||||
# Platform Certification Testing Guide
|
||||
|
||||
## Overview
|
||||
|
||||
Certification testing ensures games meet platform holder requirements (Sony TRC, Microsoft XR, Nintendo Guidelines). Failing certification delays launch and costs money—test thoroughly before submission.
|
||||
|
||||
## Platform Requirements Overview
|
||||
|
||||
### Major Platforms
|
||||
|
||||
| Platform | Requirements Doc | Submission Portal |
|
||||
| --------------- | -------------------------------------- | ------------------------- |
|
||||
| PlayStation | TRC (Technical Requirements Checklist) | PlayStation Partners |
|
||||
| Xbox | XR (Xbox Requirements) | Xbox Partner Center |
|
||||
| Nintendo Switch | Guidelines | Nintendo Developer Portal |
|
||||
| Steam | Guidelines (less strict) | Steamworks |
|
||||
| iOS | App Store Guidelines | App Store Connect |
|
||||
| Android | Play Store Policies | Google Play Console |
|
||||
|
||||
## Common Certification Categories
|
||||
|
||||
### Account and User Management
|
||||
|
||||
```
|
||||
REQUIREMENT: User Switching
|
||||
GIVEN user is playing game
|
||||
WHEN system-level user switch occurs
|
||||
THEN game handles transition gracefully
|
||||
AND no data corruption
|
||||
AND correct user data loads
|
||||
|
||||
REQUIREMENT: Guest Accounts
|
||||
GIVEN guest user plays game
|
||||
WHEN guest makes progress
|
||||
THEN progress is not saved to other accounts
|
||||
AND appropriate warnings displayed
|
||||
|
||||
REQUIREMENT: Parental Controls
|
||||
GIVEN parental controls restrict content
|
||||
WHEN restricted content is accessed
|
||||
THEN content is blocked or modified
|
||||
AND appropriate messaging shown
|
||||
```
|
||||
|
||||
### System Events
|
||||
|
||||
```
|
||||
REQUIREMENT: Suspend/Resume (PS4/PS5)
|
||||
GIVEN game is running
|
||||
WHEN console enters rest mode
|
||||
AND console wakes from rest mode
|
||||
THEN game resumes correctly
|
||||
AND network reconnects if needed
|
||||
AND no audio/visual glitches
|
||||
|
||||
REQUIREMENT: Controller Disconnect
|
||||
GIVEN player is in gameplay
|
||||
WHEN controller battery dies
|
||||
THEN game pauses immediately
|
||||
AND reconnect prompt appears
|
||||
AND gameplay resumes when connected
|
||||
|
||||
REQUIREMENT: Storage Full
|
||||
GIVEN storage is nearly full
|
||||
WHEN game attempts save
|
||||
THEN graceful error handling
|
||||
AND user informed of issue
|
||||
AND no data corruption
|
||||
```
|
||||
|
||||
### Network Requirements
|
||||
|
||||
```
|
||||
REQUIREMENT: PSN/Xbox Live Unavailable
|
||||
GIVEN online features
|
||||
WHEN platform network is unavailable
|
||||
THEN offline features still work
|
||||
AND appropriate error messages
|
||||
AND no crashes
|
||||
|
||||
REQUIREMENT: Network Transition
|
||||
GIVEN active online session
|
||||
WHEN network connection lost
|
||||
THEN graceful handling
|
||||
AND reconnection attempted
|
||||
AND user informed of status
|
||||
|
||||
REQUIREMENT: NAT Type Handling
|
||||
GIVEN various NAT configurations
|
||||
WHEN multiplayer is attempted
|
||||
THEN appropriate feedback on connectivity
|
||||
AND fallback options offered
|
||||
```
|
||||
|
||||
### Save Data
|
||||
|
||||
```
|
||||
REQUIREMENT: Save Data Integrity
|
||||
GIVEN save data exists
|
||||
WHEN save is loaded
|
||||
THEN data is validated
|
||||
AND corrupted data handled gracefully
|
||||
AND no crashes on invalid data
|
||||
|
||||
REQUIREMENT: Cloud Save Sync
|
||||
GIVEN cloud saves enabled
|
||||
WHEN save conflict occurs
|
||||
THEN user chooses which to keep
|
||||
AND no silent data loss
|
||||
|
||||
REQUIREMENT: Save Data Portability (PS4→PS5)
|
||||
GIVEN save from previous generation
|
||||
WHEN loaded on current generation
|
||||
THEN data migrates correctly
|
||||
AND no features lost
|
||||
```
|
||||
|
||||
## Platform-Specific Requirements
|
||||
|
||||
### PlayStation (TRC)
|
||||
|
||||
| Requirement | Description | Priority |
|
||||
| ----------- | --------------------------- | -------- |
|
||||
| TRC R4010 | Suspend/resume handling | Critical |
|
||||
| TRC R4037 | User switching | Critical |
|
||||
| TRC R4062 | Parental controls | Critical |
|
||||
| TRC R4103 | PS VR comfort ratings | VR only |
|
||||
| TRC R4120 | DualSense haptics standards | PS5 |
|
||||
| TRC R5102 | PSN sign-in requirements | Online |
|
||||
|
||||
### Xbox (XR)
|
||||
|
||||
| Requirement | Description | Priority |
|
||||
| ----------- | ----------------------------- | ----------- |
|
||||
| XR-015 | Title timeout handling | Critical |
|
||||
| XR-045 | User sign-out handling | Critical |
|
||||
| XR-067 | Active user requirement | Critical |
|
||||
| XR-074 | Quick Resume support | Series X/S |
|
||||
| XR-115 | Xbox Accessibility Guidelines | Recommended |
|
||||
|
||||
### Nintendo Switch
|
||||
|
||||
| Requirement | Description | Priority |
|
||||
| ------------------ | ------------------- | -------- |
|
||||
| Docked/Handheld | Seamless transition | Critical |
|
||||
| Joy-Con detachment | Controller handling | Critical |
|
||||
| Home button | Immediate response | Critical |
|
||||
| Screenshots/Video | Proper support | Required |
|
||||
| Sleep mode | Resume correctly | Critical |
|
||||
|
||||
## Automated Test Examples
|
||||
|
||||
### System Event Testing
|
||||
|
||||
```cpp
|
||||
// Unreal - Suspend/Resume Test
|
||||
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
|
||||
FSuspendResumeTest,
|
||||
"Certification.System.SuspendResume",
|
||||
EAutomationTestFlags::ApplicationContextMask | EAutomationTestFlags::ProductFilter
|
||||
)
|
||||
|
||||
bool FSuspendResumeTest::RunTest(const FString& Parameters)
|
||||
{
|
||||
// Get game state before suspend
|
||||
FGameState StateBefore = GetCurrentGameState();
|
||||
|
||||
// Simulate suspend
|
||||
FCoreDelegates::ApplicationWillEnterBackgroundDelegate.Broadcast();
|
||||
|
||||
// Simulate resume
|
||||
FCoreDelegates::ApplicationHasEnteredForegroundDelegate.Broadcast();
|
||||
|
||||
// Verify state matches
|
||||
FGameState StateAfter = GetCurrentGameState();
|
||||
|
||||
TestEqual("Player position preserved",
|
||||
StateAfter.PlayerPosition, StateBefore.PlayerPosition);
|
||||
TestEqual("Game progress preserved",
|
||||
StateAfter.Progress, StateBefore.Progress);
|
||||
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
```csharp
|
||||
// Unity - Controller Disconnect Test
|
||||
[UnityTest]
|
||||
public IEnumerator ControllerDisconnect_ShowsPauseMenu()
|
||||
{
|
||||
// Simulate gameplay
|
||||
GameManager.Instance.StartGame();
|
||||
yield return new WaitForSeconds(1f);
|
||||
|
||||
// Simulate controller disconnect
|
||||
InputSystem.DisconnectDevice(Gamepad.current);
|
||||
yield return null;
|
||||
|
||||
// Verify pause menu shown
|
||||
Assert.IsTrue(PauseMenu.IsVisible, "Pause menu should appear");
|
||||
Assert.IsTrue(Time.timeScale == 0, "Game should be paused");
|
||||
|
||||
// Simulate reconnect
|
||||
InputSystem.ReconnectDevice(Gamepad.current);
|
||||
yield return null;
|
||||
|
||||
// Verify prompt appears
|
||||
Assert.IsTrue(ReconnectPrompt.IsVisible);
|
||||
}
|
||||
```
|
||||
|
||||
```gdscript
|
||||
# Godot - Save Corruption Test
|
||||
func test_corrupted_save_handling():
|
||||
# Create corrupted save file
|
||||
var file = FileAccess.open("user://save_corrupt.dat", FileAccess.WRITE)
|
||||
file.store_string("CORRUPTED_GARBAGE_DATA")
|
||||
file.close()
|
||||
|
||||
# Attempt to load
|
||||
var result = SaveManager.load("save_corrupt")
|
||||
|
||||
# Should handle gracefully
|
||||
assert_null(result, "Should return null for corrupted save")
|
||||
assert_false(OS.has_feature("crashed"), "Should not crash")
|
||||
|
||||
# Should show user message
|
||||
var message_shown = ErrorDisplay.current_message != ""
|
||||
assert_true(message_shown, "Should inform user of corruption")
|
||||
```
|
||||
|
||||
## Pre-Submission Checklist
|
||||
|
||||
### General Requirements
|
||||
|
||||
- [ ] Game boots to interactive state within platform time limit
|
||||
- [ ] Controller disconnect pauses game
|
||||
- [ ] User sign-out handled correctly
|
||||
- [ ] Save data validates on load
|
||||
- [ ] No crashes in 8+ hours of automated testing
|
||||
- [ ] Memory usage within platform limits
|
||||
- [ ] Load times meet requirements
|
||||
|
||||
### Platform Services
|
||||
|
||||
- [ ] Achievements/Trophies work correctly
|
||||
- [ ] Friends list integration works
|
||||
- [ ] Invite system functions
|
||||
- [ ] Store/DLC integration validated
|
||||
- [ ] Cloud saves sync properly
|
||||
|
||||
### Accessibility (Increasingly Required)
|
||||
|
||||
- [ ] Text size options
|
||||
- [ ] Colorblind modes
|
||||
- [ ] Subtitle options
|
||||
- [ ] Controller remapping
|
||||
- [ ] Screen reader support (where applicable)
|
||||
|
||||
### Content Compliance
|
||||
|
||||
- [ ] Age rating displayed correctly
|
||||
- [ ] Parental controls respected
|
||||
- [ ] No prohibited content
|
||||
- [ ] Required legal text present
|
||||
|
||||
## Common Certification Failures
|
||||
|
||||
| Issue | Platform | Fix |
|
||||
| --------------------- | ------------ | ----------------------------------- |
|
||||
| Home button delay | All consoles | Respond within required time |
|
||||
| Controller timeout | PlayStation | Handle reactivation properly |
|
||||
| Save on suspend | PlayStation | Don't save during suspend |
|
||||
| User context loss | Xbox | Track active user correctly |
|
||||
| Joy-Con drift | Switch | Proper deadzone handling |
|
||||
| Background memory | Mobile | Release resources when backgrounded |
|
||||
| Crash on corrupt data | All | Validate all loaded data |
|
||||
|
||||
## Testing Matrix
|
||||
|
||||
### Build Configurations to Test
|
||||
|
||||
| Configuration | Scenarios |
|
||||
| --------------- | ----------------------- |
|
||||
| First boot | No save data exists |
|
||||
| Return user | Save data present |
|
||||
| Upgrade path | Previous version save |
|
||||
| Fresh install | After uninstall |
|
||||
| Low storage | Minimum space available |
|
||||
| Network offline | No connectivity |
|
||||
|
||||
### Hardware Variants
|
||||
|
||||
| Platform | Variants to Test |
|
||||
| ----------- | ------------------------------- |
|
||||
| PlayStation | PS4, PS4 Pro, PS5 |
|
||||
| Xbox | One, One X, Series S, Series X |
|
||||
| Switch | Docked, Handheld, Lite |
|
||||
| PC | Min spec, recommended, high-end |
|
||||
|
||||
## Best Practices
|
||||
|
||||
### DO
|
||||
|
||||
- Read platform requirements document thoroughly
|
||||
- Test on actual hardware, not just dev kits
|
||||
- Automate certification test scenarios
|
||||
- Submit with extra time for re-submission
|
||||
- Document all edge case handling
|
||||
- Test with real user accounts
|
||||
|
||||
### DON'T
|
||||
|
||||
- Assume debug builds behave like retail
|
||||
- Skip testing on oldest supported hardware
|
||||
- Ignore platform-specific features
|
||||
- Wait until last minute to test certification items
|
||||
- Use placeholder content in submission build
|
||||
- Skip testing with real platform services
|
||||
Reference in new issue
Block a user