Skip to content

Commit

Permalink
Fix autoarchive (#230)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tr00d authored Jul 11, 2023
1 parent a73aa35 commit 5dcad13
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 19 deletions.
30 changes: 23 additions & 7 deletions OpenTok/OpenTok.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,11 @@ public Session CreateSession(
{
throw new OpenTokArgumentException("ArchiveName length cannot exceed 80.");
}

if (archiveMode == ArchiveMode.MANUAL && !string.IsNullOrWhiteSpace(archiveName))
{
throw new OpenTokArgumentException("Archive name can't be specified with manual archive mode.");
}

var headers = new Dictionary<string, string> { { "Content-Type", "application/x-www-form-urlencoded" } };
var data = new Dictionary<string, object>
Expand All @@ -197,10 +202,14 @@ public Session CreateSession(
{"p2p.preference", mediaMode == MediaMode.RELAYED ? "enabled" : "disabled"},
{"archiveMode", archiveMode.ToString().ToLowerInvariant()},
{"e2ee", encryption},
{"archiveName", archiveName ?? string.Empty},
{"archiveResolution", archiveResolution.AsString(EnumFormat.Description)},
};

if (archiveMode == ArchiveMode.ALWAYS)
{
data.Add("archiveName", archiveName ?? string.Empty);
data.Add("archiveResolution", archiveResolution.AsString(EnumFormat.Description));
}

var response = Client.Post("session/create", headers, data);
var xmlDoc = Client.ReadXmlResponse(response);

Expand Down Expand Up @@ -301,19 +310,26 @@ public async Task<Session> CreateSessionAsync(string location = "", MediaMode me
throw new OpenTokArgumentException("ArchiveName length cannot exceed 80.");
}

if (archiveMode == ArchiveMode.MANUAL && !string.IsNullOrWhiteSpace(archiveName))
{
throw new OpenTokArgumentException("Archive name can't be specified with manual archive mode.");
}

var headers = new Dictionary<string, string> { { "Content-Type", "application/x-www-form-urlencoded" } };
var data = new Dictionary<string, object>
{
{"location", location},
{"p2p.preference", mediaMode == MediaMode.RELAYED
? "enabled"
: "disabled"},
{"p2p.preference", mediaMode == MediaMode.RELAYED ? "enabled" : "disabled"},
{"archiveMode", archiveMode.ToString().ToLowerInvariant()},
{"e2ee", encryption},
{"archiveName", archiveName ?? string.Empty},
{"archiveResolution", archiveResolution.AsString(EnumFormat.Description)},
};

if (archiveMode == ArchiveMode.ALWAYS)
{
data.Add("archiveName", archiveName ?? string.Empty);
data.Add("archiveResolution", archiveResolution.AsString(EnumFormat.Description));
}

var response = await Client.PostAsync("session/create", headers, data);
var xmlDoc = Client.ReadXmlResponse(response);

Expand Down
33 changes: 21 additions & 12 deletions OpenTokTest/Session.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public void CreateSessionSimple()
}

[Fact]
public void CreateSession_ShouldSendArchiveName()
public void CreateSession_ShouldSendArchiveName_GivenArchiveModeIsAlways()
{
var returnString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><sessions><Session><" +
"session_id>" + this.SessionId + "</session_id><partner_id>123456</partner_id><create_dt>" +
Expand All @@ -79,10 +79,19 @@ public void CreateSession_ShouldSendArchiveName()
var session = new OpenTok(this.ApiKey, this.ApiSecret)
{
Client = mockClient.Object,
}.CreateSession(archiveName: "TestArchiveName");
}.CreateSession(archiveMode: ArchiveMode.ALWAYS, mediaMode: MediaMode.ROUTED, archiveName: "TestArchiveName");
Assert.NotNull(session);
}

[Fact]
public void CreateSession_ShouldThrowException_GivenArchiveNameIsSetInManualArchiveMode() =>
Assert.Throws<OpenTokArgumentException>(() => new OpenTok(this.ApiKey, this.ApiSecret).CreateSession(archiveName: "TestArchiveName"));

[Fact]
public void CreateSessionAsync_ShouldThrowException_GivenArchiveNameIsSetInManualArchiveMode() =>
Assert.ThrowsAsync<OpenTokArgumentException>(() => new OpenTok(this.ApiKey, this.ApiSecret).CreateSessionAsync(archiveName: "TestArchiveName"));


[Fact]
public void CreateSession_ShouldThrowException_GivenArchiveExceeds80Characters()
{
Expand All @@ -96,7 +105,7 @@ public void CreateSession_ShouldThrowException_GivenArchiveExceeds80Characters()
}

[Fact]
public void CreateSession_ShouldSendArchiveResolution()
public void CreateSession_ShouldSendArchiveResolution_GivenArchiveModeIsAlways()
{
var returnString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><sessions><Session><" +
"session_id>" + this.SessionId + "</session_id><partner_id>123456</partner_id><create_dt>" +
Expand All @@ -113,12 +122,12 @@ public void CreateSession_ShouldSendArchiveResolution()
var session = new OpenTok(this.ApiKey, this.ApiSecret)
{
Client = mockClient.Object,
}.CreateSession(archiveResolution: RenderResolution.FullHighDefinitionLandscape);
}.CreateSession(archiveMode: ArchiveMode.ALWAYS, mediaMode: MediaMode.ROUTED, archiveResolution: RenderResolution.FullHighDefinitionLandscape);
Assert.NotNull(session);
}

[Fact]
public void CreateSession_ShouldSendDefaultArchivingValues()
public void CreateSession_ShouldSendDefaultArchivingValues_GivenArchiveModeIsAlways()
{
var returnString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><sessions><Session><" +
"session_id>" + this.SessionId + "</session_id><partner_id>123456</partner_id><create_dt>" +
Expand All @@ -135,12 +144,12 @@ public void CreateSession_ShouldSendDefaultArchivingValues()
var session = new OpenTok(this.ApiKey, this.ApiSecret)
{
Client = mockClient.Object,
}.CreateSession();
}.CreateSession(archiveMode: ArchiveMode.ALWAYS, mediaMode: MediaMode.ROUTED);
Assert.NotNull(session);
}

[Fact]
public async Task CreateSessionAsync_ShouldSendArchiveName()
public async Task CreateSessionAsync_ShouldSendArchiveName_GivenArchiveModeIsAlways()
{
var returnString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><sessions><Session><" +
"session_id>" + this.SessionId + "</session_id><partner_id>123456</partner_id><create_dt>" +
Expand All @@ -157,7 +166,7 @@ public async Task CreateSessionAsync_ShouldSendArchiveName()
var session = await new OpenTok(this.ApiKey, this.ApiSecret)
{
Client = mockClient.Object,
}.CreateSessionAsync(archiveName: "TestArchiveName");
}.CreateSessionAsync(archiveMode: ArchiveMode.ALWAYS, mediaMode: MediaMode.ROUTED, archiveName: "TestArchiveName");
Assert.NotNull(session);
}

Expand All @@ -174,7 +183,7 @@ public async Task CreateSessionAsync_ShouldThrowException_GivenArchiveExceeds80C
}

[Fact]
public async Task CreateSessionAsync_ShouldSendArchiveResolution()
public async Task CreateSessionAsync_ShouldSendArchiveResolution_GivenArchiveModeIsAlways()
{
var returnString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><sessions><Session><" +
"session_id>" + this.SessionId + "</session_id><partner_id>123456</partner_id><create_dt>" +
Expand All @@ -191,12 +200,12 @@ public async Task CreateSessionAsync_ShouldSendArchiveResolution()
var session = await new OpenTok(this.ApiKey, this.ApiSecret)
{
Client = mockClient.Object,
}.CreateSessionAsync(archiveResolution: RenderResolution.FullHighDefinitionLandscape);
}.CreateSessionAsync(archiveMode: ArchiveMode.ALWAYS, mediaMode: MediaMode.ROUTED, archiveResolution: RenderResolution.FullHighDefinitionLandscape);
Assert.NotNull(session);
}

[Fact]
public async Task CreateSessionAsync_ShouldSendDefaultArchivingValues()
public async Task CreateSessionAsync_ShouldSendDefaultArchivingValues_GivenArchiveModeIsAlways()
{
var returnString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><sessions><Session><" +
"session_id>" + this.SessionId + "</session_id><partner_id>123456</partner_id><create_dt>" +
Expand All @@ -213,7 +222,7 @@ public async Task CreateSessionAsync_ShouldSendDefaultArchivingValues()
var session = await new OpenTok(this.ApiKey, this.ApiSecret)
{
Client = mockClient.Object,
}.CreateSessionAsync();
}.CreateSessionAsync(archiveMode: ArchiveMode.ALWAYS, mediaMode: MediaMode.ROUTED);
Assert.NotNull(session);
}

Expand Down

0 comments on commit 5dcad13

Please sign in to comment.