Skip to content

Commit 2e095bb

Browse files
authored
Merge branch 'master' into master
2 parents 2c2e354 + a394f7f commit 2e095bb

File tree

5 files changed

+77
-0
lines changed

5 files changed

+77
-0
lines changed

src/OpenTok/OpenTok.php

100644100755
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,14 @@ public function listArchives($offset=0, $count=null)
386386
return new ArchiveList($archiveListData, array( 'client' => $this->client ));
387387
}
388388

389+
public function forceDisconnect($sessionId, $connectionId)
390+
{
391+
Validators::validateSessionId($sessionId);
392+
Validators::validateConnectionId($connectionId);
393+
394+
return $this->client->forceDisconnect($sessionId, $connectionId);
395+
}
396+
389397
public function startBroadcast($sessionId, $options=array())
390398
{
391399
// unpack optional arguments (merging with default values) into named variables

src/OpenTok/Util/Client.php

100644100755
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,19 @@ public function deleteArchive($archiveId)
131131
return true;
132132
}
133133

134+
public function forceDisconnect($sessionId,$connectionId)
135+
{
136+
$request = $this->delete('/v2/project/'.$this->apiKey.'/session/'.$sessionId.'/connection/'.$connectionId);
137+
$request->setHeader('Content-Type', 'application/json');
138+
try {
139+
$request->send()->json();
140+
} catch (\Exception $e) {
141+
$this->handleException($e);
142+
return false;
143+
}
144+
return true;
145+
}
146+
134147
public function listArchives($offset, $count)
135148
{
136149
$request = $this->get('/v2/project/'.$this->apiKey.'/archive');

src/OpenTok/Util/Validators.php

100644100755
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ public static function validateSessionId($sessionId)
6262
);
6363
}
6464
}
65+
public static function validateConnectionId($connectionId)
66+
{
67+
if(!is_string($connectionId) || empty($connectionId)){
68+
throw new InvalidArgumentException(
69+
'Null or empty connection ID is not valid: '.print_r($connectionId, true)
70+
);
71+
}
72+
}
6573
public static function validateRole($role)
6674
{
6775
if (!Role::isValidValue($role)) {

tests/OpenTok/OpenTokTest.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,50 @@ public function testGetsExpiredArchive()
833833
$this->assertEquals("expired", $archive->status);
834834
}
835835

836+
public function testForceDisconnect()
837+
{
838+
// Arrange
839+
$mock = new MockPlugin();
840+
$response = MockPlugin::getMockFile(
841+
self::$mockBasePath . 'v2/project/APIKEY/session/SESSIONID/connection/CONNECTIONID/delete'
842+
);
843+
$mock->addResponse($response);
844+
$this->client->addSubscriber($mock);
845+
846+
// This sessionId was generated using a different apiKey, but this method doesn't do any
847+
// decoding to check, so its fine.
848+
$sessionId = '2_MX44NTQ1MTF-flR1ZSBOb3YgMTIgMDk6NDA6NTkgUFNUIDIwMTN-MC43NjU0Nzh-';
849+
850+
$connectionId = '063e72a4-64b4-43c8-9da5-eca071daab89';
851+
852+
// Act
853+
$success = $this->opentok->forceDisconnect($sessionId, $connectionId);
854+
855+
// Assert
856+
$requests = $mock->getReceivedRequests();
857+
$this->assertCount(1, $requests);
858+
859+
$request = $requests[0];
860+
$this->assertEquals('DELETE', strtoupper($request->getMethod()));
861+
$this->assertEquals('/v2/project/'.$this->API_KEY.'/session/'.$sessionId.'/connection/'.$connectionId, $request->getPath());
862+
$this->assertEquals('api.opentok.com', $request->getHost());
863+
$this->assertEquals('https', $request->getScheme());
864+
865+
$contentType = $request->getHeader('Content-Type');
866+
$this->assertNotEmpty($contentType);
867+
$this->assertEquals('application/json', $contentType);
868+
869+
$authString = $request->getHeader('X-OPENTOK-AUTH');
870+
$this->assertEquals(true, TestHelpers::validateOpenTokAuthHeader($this->API_KEY, $this->API_SECRET, $authString));
871+
872+
// TODO: test the dynamically built User Agent string
873+
$userAgent = $request->getHeader('User-Agent');
874+
$this->assertNotEmpty($userAgent);
875+
$this->assertStringStartsWith('OpenTok-PHP-SDK/2.5.0', $userAgent->__toString());
876+
877+
$this->assertTrue($success);
878+
}
879+
836880
public function testStartsBroadcast()
837881
{
838882
// Arrange
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
HTTP/1.1 204 No Content
2+
Server: nginx
3+
Date: Sun, 09 Mar 2014 20:14:41 GMT
4+
Connection: keep-alive

0 commit comments

Comments
 (0)