mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Make SaveDataManagement functions public and add tests
This commit is contained in:
parent
3056c5c296
commit
b346280bc9
3 changed files with 60 additions and 9 deletions
|
@ -67,7 +67,7 @@ namespace LibHac.Fs.Shim
|
||||||
[SkipLocalsInit]
|
[SkipLocalsInit]
|
||||||
public static class SaveDataManagement
|
public static class SaveDataManagement
|
||||||
{
|
{
|
||||||
internal static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
public static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
||||||
out SaveDataExtraData extraData, ulong saveDataId)
|
out SaveDataExtraData extraData, ulong saveDataId)
|
||||||
{
|
{
|
||||||
UnsafeHelpers.SkipParamInit(out extraData);
|
UnsafeHelpers.SkipParamInit(out extraData);
|
||||||
|
@ -80,7 +80,7 @@ namespace LibHac.Fs.Shim
|
||||||
return Result.Success;
|
return Result.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
public static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
||||||
out SaveDataExtraData extraData, SaveDataSpaceId spaceId, ulong saveDataId)
|
out SaveDataExtraData extraData, SaveDataSpaceId spaceId, ulong saveDataId)
|
||||||
{
|
{
|
||||||
UnsafeHelpers.SkipParamInit(out extraData);
|
UnsafeHelpers.SkipParamInit(out extraData);
|
||||||
|
@ -94,7 +94,7 @@ namespace LibHac.Fs.Shim
|
||||||
return Result.Success;
|
return Result.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
public static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
||||||
out SaveDataExtraData extraData, SaveDataSpaceId spaceId, in SaveDataAttribute attribute)
|
out SaveDataExtraData extraData, SaveDataSpaceId spaceId, in SaveDataAttribute attribute)
|
||||||
{
|
{
|
||||||
UnsafeHelpers.SkipParamInit(out extraData);
|
UnsafeHelpers.SkipParamInit(out extraData);
|
||||||
|
@ -108,7 +108,7 @@ namespace LibHac.Fs.Shim
|
||||||
return Result.Success;
|
return Result.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
public static Result ReadSaveDataFileSystemExtraData(this FileSystemClientImpl fs,
|
||||||
out SaveDataExtraData extraData, SaveDataSpaceId spaceId, in SaveDataAttribute attribute,
|
out SaveDataExtraData extraData, SaveDataSpaceId spaceId, in SaveDataAttribute attribute,
|
||||||
in SaveDataExtraData extraDataMask)
|
in SaveDataExtraData extraDataMask)
|
||||||
{
|
{
|
||||||
|
@ -123,7 +123,7 @@ namespace LibHac.Fs.Shim
|
||||||
return Result.Success;
|
return Result.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Result WriteSaveDataFileSystemExtraData(this FileSystemClientImpl fs, SaveDataSpaceId spaceId,
|
public static Result WriteSaveDataFileSystemExtraData(this FileSystemClientImpl fs, SaveDataSpaceId spaceId,
|
||||||
ulong saveDataId, in SaveDataExtraData extraData)
|
ulong saveDataId, in SaveDataExtraData extraData)
|
||||||
{
|
{
|
||||||
using ReferenceCountedDisposable<IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject();
|
using ReferenceCountedDisposable<IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject();
|
||||||
|
@ -134,7 +134,7 @@ namespace LibHac.Fs.Shim
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Result WriteSaveDataFileSystemExtraData(this FileSystemClientImpl fs, SaveDataSpaceId spaceId,
|
public static Result WriteSaveDataFileSystemExtraData(this FileSystemClientImpl fs, SaveDataSpaceId spaceId,
|
||||||
ulong saveDataId, in SaveDataExtraData extraData, in SaveDataExtraData extraDataMask)
|
ulong saveDataId, in SaveDataExtraData extraData, in SaveDataExtraData extraDataMask)
|
||||||
{
|
{
|
||||||
using ReferenceCountedDisposable<IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject();
|
using ReferenceCountedDisposable<IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject();
|
||||||
|
@ -145,7 +145,7 @@ namespace LibHac.Fs.Shim
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Result WriteSaveDataFileSystemExtraData(this FileSystemClientImpl fs, SaveDataSpaceId spaceId,
|
public static Result WriteSaveDataFileSystemExtraData(this FileSystemClientImpl fs, SaveDataSpaceId spaceId,
|
||||||
in SaveDataAttribute attribute, in SaveDataExtraData extraData, in SaveDataExtraData extraDataMask)
|
in SaveDataAttribute attribute, in SaveDataExtraData extraData, in SaveDataExtraData extraDataMask)
|
||||||
{
|
{
|
||||||
using ReferenceCountedDisposable<IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject();
|
using ReferenceCountedDisposable<IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject();
|
||||||
|
@ -156,7 +156,7 @@ namespace LibHac.Fs.Shim
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Result FindSaveDataWithFilter(this FileSystemClientImpl fs, out SaveDataInfo saveInfo,
|
public static Result FindSaveDataWithFilter(this FileSystemClientImpl fs, out SaveDataInfo saveInfo,
|
||||||
SaveDataSpaceId spaceId, in SaveDataFilter filter)
|
SaveDataSpaceId spaceId, in SaveDataFilter filter)
|
||||||
{
|
{
|
||||||
UnsafeHelpers.SkipParamInit(out saveInfo);
|
UnsafeHelpers.SkipParamInit(out saveInfo);
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace LibHac.Tests.Fs.FileSystemClientTests
|
||||||
{
|
{
|
||||||
public static class FileSystemServerFactory
|
public static class FileSystemServerFactory
|
||||||
{
|
{
|
||||||
private static FileSystemClient CreateClientImpl(bool sdCardInserted, out IFileSystem rootFs)
|
private static Horizon CreateHorizonImpl(bool sdCardInserted, out IFileSystem rootFs)
|
||||||
{
|
{
|
||||||
rootFs = new InMemoryFileSystem();
|
rootFs = new InMemoryFileSystem();
|
||||||
var keySet = new KeySet();
|
var keySet = new KeySet();
|
||||||
|
@ -27,6 +27,12 @@ namespace LibHac.Tests.Fs.FileSystemClientTests
|
||||||
config.ExternalKeySet = new ExternalKeySet();
|
config.ExternalKeySet = new ExternalKeySet();
|
||||||
|
|
||||||
FileSystemServerInitializer.InitializeWithConfig(fsServerClient, fsServer, config);
|
FileSystemServerInitializer.InitializeWithConfig(fsServerClient, fsServer, config);
|
||||||
|
return horizon;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static FileSystemClient CreateClientImpl(bool sdCardInserted, out IFileSystem rootFs)
|
||||||
|
{
|
||||||
|
Horizon horizon = CreateHorizonImpl(sdCardInserted, out rootFs);
|
||||||
|
|
||||||
HorizonClient horizonClient = horizon.CreatePrivilegedHorizonClient();
|
HorizonClient horizonClient = horizon.CreatePrivilegedHorizonClient();
|
||||||
|
|
||||||
|
@ -42,5 +48,10 @@ namespace LibHac.Tests.Fs.FileSystemClientTests
|
||||||
{
|
{
|
||||||
return CreateClientImpl(false, out rootFs);
|
return CreateClientImpl(false, out rootFs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Horizon CreateHorizonServer()
|
||||||
|
{
|
||||||
|
return CreateHorizonImpl(true, out _);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ using System.Linq;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Shim;
|
using LibHac.Fs.Shim;
|
||||||
|
using LibHac.FsSrv.Impl;
|
||||||
|
using LibHac.Ncm;
|
||||||
using LibHac.Time;
|
using LibHac.Time;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
@ -244,6 +246,44 @@ namespace LibHac.Tests.Fs.FileSystemClientTests.ShimTests
|
||||||
Assert.Equal(journalSize, actualJournalSize);
|
Assert.Equal(journalSize, actualJournalSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateSaveData_FromSubProgram_CreatesSaveDataForMainProgram()
|
||||||
|
{
|
||||||
|
Horizon hos = FileSystemServerFactory.CreateHorizonServer();
|
||||||
|
|
||||||
|
Span<ProgramIndexMapInfo> mapInfo = stackalloc ProgramIndexMapInfo[5];
|
||||||
|
|
||||||
|
var mainProgramId = new ProgramId(0x123456);
|
||||||
|
var programId = new ProgramId(mainProgramId.Value + 2);
|
||||||
|
|
||||||
|
for (int i = 0; i < mapInfo.Length; i++)
|
||||||
|
{
|
||||||
|
mapInfo[i].MainProgramId = mainProgramId;
|
||||||
|
mapInfo[i].ProgramId = new ProgramId(mainProgramId.Value + (uint)i);
|
||||||
|
mapInfo[i].ProgramIndex = (byte)i;
|
||||||
|
}
|
||||||
|
|
||||||
|
HorizonClient client = hos.CreatePrivilegedHorizonClient();
|
||||||
|
HorizonClient subProgramClient =
|
||||||
|
hos.CreateHorizonClient(new ProgramLocation(programId, StorageId.BuiltInUser),
|
||||||
|
AccessControlBits.Bits.CreateSaveData);
|
||||||
|
|
||||||
|
Assert.Success(client.Fs.RegisterProgramIndexMapInfo(mapInfo));
|
||||||
|
|
||||||
|
Assert.Success(subProgramClient.Fs.CreateSaveData(Ncm.ApplicationId.InvalidId, UserId.InvalidId, 0, 0x4000,
|
||||||
|
0x4000, SaveDataFlags.None));
|
||||||
|
|
||||||
|
// Get the created save data's ID
|
||||||
|
Assert.Success(client.Fs.OpenSaveDataIterator(out SaveDataIterator iterator, SaveDataSpaceId.User));
|
||||||
|
|
||||||
|
var info = new SaveDataInfo[2];
|
||||||
|
iterator.ReadSaveDataInfo(out long entriesRead, info);
|
||||||
|
|
||||||
|
Assert.Equal(1, entriesRead);
|
||||||
|
|
||||||
|
Assert.Equal(mainProgramId, info[0].ProgramId);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DeleteSaveData_DoesNotExist_ReturnsTargetNotFound()
|
public void DeleteSaveData_DoesNotExist_ReturnsTargetNotFound()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue