This commit is contained in:
2024-05-20 15:37:46 +03:00
commit 00b7dbd0b7
10404 changed files with 3285853 additions and 0 deletions

View File

@ -0,0 +1,82 @@
<?php
class MixpanelBaseProducerTest extends PHPUnit_Framework_TestCase {
/**
* @var _Producers_MixpanelBaseProducer
*/
protected $_instance = null;
protected $_file = null;
protected function setUp() {
parent::setUp();
$this->_file = dirname(__FILE__)."/output-".time().".txt";
$this->_instance = new _Producers_MixpanelBaseProducer("token", array("consumer" => "file", "debug" => true, "file" => $this->_file));
}
protected function tearDown() {
parent::tearDown();
$this->_instance->reset();
$this->_instance = null;
@unlink($this->_file);
}
public function testTokenMatch() {
$this->assertEquals("token", $this->_instance->getToken());
}
public function testFlush() {
$event1 = array("event" => "test", "properties" => array("prop1" => "val1"));
$event2 = array("event" => "test2", "properties" => array("prop2" => "val2"));
$this->_instance->enqueue($event1);
$this->_instance->enqueue($event2);
$this->_instance->flush(1);
$contents = file_get_contents($this->_file);
$this->assertEquals('[{"event":"test","properties":{"prop1":"val1"}}]'."\n".
'[{"event":"test2","properties":{"prop2":"val2"}}]'."\n", $contents);
}
public function testReset() {
$event1 = array("event" => "test", "properties" => array("prop1" => "val1"));
$this->_instance->enqueue($event1);
$this->_instance->reset();
$this->assertEmpty($this->_instance->getQueue());
}
public function testEnqueue() {
$this->_instance->reset();
$event1 = array("event" => "test", "properties" => array("prop1" => "val1"));
$this->_instance->enqueue($event1);
$queue = $this->_instance->getQueue();
$this->assertCount(1, $queue);
$this->assertEquals($event1, $queue[0]);
}
public function testEnqueueAll() {
$this->_instance->reset();
$event1 = array("event" => "test", "properties" => array("prop1" => "val1"));
$event2 = array("event" => "test2", "properties" => array("prop1" => "val1"));
$events = array($event1, $event2);
$this->_instance->enqueueAll($events);
$queue = $this->_instance->getQueue();
$this->assertCount(2, $queue);
$this->assertEquals($event1, $queue[0]);
$this->assertEquals($event2, $queue[1]);
}
public function testSetMaxQueueSize() {
$this->_instance->enqueue(array("event" => "test"));
$queue = $this->_instance->getQueue();
$this->assertEquals(1, count($queue));
$this->_instance->flush();
$new_instance = new Producers_MixpanelEvents("token", array('max_queue_size' => 0));
$new_instance->track("test");
$queue = $new_instance->getQueue();
$this->assertEquals(0, count($queue));
}
}
// stub for tests
class _Producers_MixpanelBaseProducer extends Producers_MixpanelBaseProducer {
function _getEndpoint() {
}
}

View File

@ -0,0 +1,45 @@
<?php
class ConsumerStrategies_AbstractConsumerTest extends PHPUnit_Framework_TestCase {
/**
* @var AbstractConsumer
*/
protected $_instance = null;
protected function setUp()
{
parent::setUp();
$this->_instance = new AbstractConsumer();
}
protected function tearDown()
{
parent::tearDown();
$this->_instance = null;
}
public function test_encode() {
$encoded = base64_encode(json_encode(array("1" => "one")));
$this->assertEquals($encoded, $this->_instance->encode(array("1" => "one")));
}
}
class AbstractConsumer extends ConsumerStrategies_AbstractConsumer {
/**
* Persist a batch of messages in whatever way the implementer sees fit
* @param array $batch an array of messages to consume
* @return boolean success or fail
*/
function persist($batch)
{
// TODO: Implement persist() method.
}
function encode($msg) {
return $this->_encode($msg);
}
}

View File

@ -0,0 +1,151 @@
<?php
class ConsumerStrategies_CurlConsumerTest extends PHPUnit_Framework_TestCase {
public function testSettings() {
$consumer = new CurlConsumer(array(
"host" => "localhost",
"endpoint" => "/endpoint",
"timeout" => 2,
"use_ssl" => false,
"fork" => false
));
$this->assertEquals("localhost", $consumer->getHost());
$this->assertEquals("/endpoint", $consumer->getEndpoint());
$this->assertEquals(2, $consumer->getTimeout());
$this->assertEquals("http", $consumer->getProtocol());
$this->assertEquals(false, $consumer->getFork());
}
public function testBlocking() {
$consumer = new CurlConsumer(array(
"host" => "localhost",
"endpoint" => "/endpoint",
"timeout" => 2,
"use_ssl" => true,
"fork" => false
));
$consumer->persist(array("msg"));
$this->assertEquals(1, $consumer->blockingCalls);
}
public function testForked() {
$consumer = new CurlConsumer(array(
"host" => "localhost",
"endpoint" => "/endpoint",
"timeout" => 2,
"use_ssl" => true,
"fork" => true
));
$consumer->persist(array("msg"));
$this->assertEquals(1, $consumer->forkedCalls);
}
public function testExecuteCurlFailure() {
$error_handler = new ErrorHandler();
$consumer = new ConsumerStrategies_CurlConsumer(array(
"host" => "some.domain.that.should.not.ever.exist.tld",
"endpoint" => "/endpoint",
"timeout" => 2,
"use_ssl" => false,
"fork" => false,
"error_callback" => array($error_handler, 'handle_error')
));
$resp = $consumer->persist(array("msg"));
$this->assertFalse($resp);
$this->assertEquals($error_handler->last_code, CURLE_COULDNT_RESOLVE_HOST);
}
public function testOptions() {
function callback() { }
$consumer = new ConsumerStrategies_CurlConsumer(array(
"host" => "localhost",
"endpoint" => "/endpoint",
"timeout" => 2,
"connect_timeout" => 1,
"use_ssl" => true,
"fork" => false,
"num_threads" => 5,
"error_callback" => 'callback'
));
$this->assertEquals($consumer->getHost(), "localhost");
$this->assertEquals($consumer->getEndpoint(), "/endpoint");
$this->assertEquals($consumer->getTimeout(), 2);
$this->assertEquals($consumer->getConnectTimeout(), 1);
$this->assertEquals($consumer->getProtocol(), "https");
$this->assertEquals($consumer->getNumThreads(), 5);
}
}
class ErrorHandler {
public $last_code = -1;
public $last_msg = "";
public function handle_error($code, $msg) {
$this->last_code = $code;
$this->last_msg = $msg;
}
}
class CurlConsumer extends ConsumerStrategies_CurlConsumer {
public $forkedCalls = 0;
public $blockingCalls = 0;
/**
* @return string
*/
public function getEndpoint()
{
return $this->_endpoint;
}
/**
* @return bool|null
*/
public function getFork()
{
return $this->_fork;
}
/**
* @return string
*/
public function getHost()
{
return $this->_host;
}
/**
* @return string
*/
public function getProtocol()
{
return $this->_protocol;
}
/**
* @return int
*/
public function getTimeout()
{
return $this->_timeout;
}
protected function _execute($url, $data)
{
$this->blockingCalls++;
return parent::_execute($url, $data);
}
protected function _execute_forked($url, $data)
{
$this->forkedCalls++;
return parent::_execute_forked($url, $data);
}
}

View File

@ -0,0 +1,30 @@
<?php
class ConsumerStrategies_FileConsumerTest extends PHPUnit_Framework_TestCase {
/**
* @var ConsumerStrategies_FileConsumer
*/
protected $_instance = null;
protected $_file = null;
protected function setUp()
{
parent::setUp();
$this->_file = dirname(__FILE__)."/output-".time().".txt";
$this->_instance = new ConsumerStrategies_FileConsumer(array("file" => $this->_file));
}
protected function tearDown()
{
parent::tearDown();
$this->_instance = null;
@unlink($this->_file);
}
public function testPersist() {
$this->_instance->persist(array("msg"));
$contents = file_get_contents($this->_file);
$this->assertEquals('["msg"]'."\n", $contents);
}
}

View File

@ -0,0 +1,32 @@
<?php
class ConsumerStrategies_SocketConsumerTest extends PHPUnit_Framework_TestCase {
/**
* @var ConsumerStrategies_SocketConsumer
*/
protected $_instance = null;
protected $_file = null;
protected function setUp()
{
parent::setUp();
$this->_instance = new ConsumerStrategies_SocketConsumer(array(
"host" => "localhost",
"endpoint" => "/endpoint",
"timeout" => 2,
"use_ssl" => false
));
}
protected function tearDown()
{
parent::tearDown();
$this->_instance = null;
}
public function testPersist() {
}
}

View File

@ -0,0 +1,29 @@
<?php
class MixpanelTest extends PHPUnit_Framework_TestCase {
/**
* @var Mixpanel
*/
protected $_instance = null;
protected function setUp() {
parent::setUp();
$this->_instance = Mixpanel::getInstance("token");
}
protected function tearDown() {
parent::tearDown();
$this->_instance->reset();
$this->_instance = null;
}
public function testGetInstance() {
$instance = Mixpanel::getInstance("token");
$this->assertInstanceOf("Mixpanel", $instance);
$this->assertEquals($this->_instance, $instance);
$this->assertInstanceOf("Producers_MixpanelPeople", $this->_instance->people);
}
}

View File

@ -0,0 +1,149 @@
<?php
class MixpanelEventsProducerTest extends PHPUnit_Framework_TestCase {
/**
* @var Producers_MixpanelEvents
*/
protected $_instance = null;
protected function setUp()
{
parent::setUp();
$this->_instance = new Producers_MixpanelEvents("token");
}
protected function tearDown()
{
parent::tearDown();
$this->_instance->reset();
$this->_instance = null;
}
public function testTrack() {
$this->_instance->track("test_event", array("number" => 1));
$queue = $this->_instance->getQueue();
$this->assertEquals(1, count($queue));
$this->assertEquals("test_event", $queue[0]['event']);
$this->assertEquals(1, $queue[0]['properties']['number']);
}
public function testRegister() {
$this->_instance->register("super_property", "super_value");
$this->assertEquals("super_value", $this->_instance->getProperty("super_property"));
}
public function testRegisterAll() {
$this->_instance->registerAll(array("prop1" => "val1", "prop2" => "val2"));
$this->assertEquals("val1", $this->_instance->getProperty("prop1"));
$this->assertEquals("val2", $this->_instance->getProperty("prop2"));
}
public function testRegisterOnce() {
$this->_instance->registerOnce("prop3", "val3");
$this->_instance->registerOnce("prop3", "val4");
$this->assertEquals("val3", $this->_instance->getProperty("prop3"));
}
public function testRegisterAllOnce() {
$this->_instance->registerAllOnce(array("prop5" => "val5", "prop6" => "val6"));
$this->_instance->registerAllOnce(array("prop5" => "val6", "prop6" => "val7"));
$this->assertEquals("val5", $this->_instance->getProperty("prop5"));
$this->assertEquals("val6", $this->_instance->getProperty("prop6"));
}
public function unregister() {
$this->_instance->register("prop7", "val7");
$this->_instance->register("prop8", "val8");
$this->assertEquals("val7", $this->_instance->getProperty("prop7"));
$this->assertEquals("val8", $this->_instance->getProperty("prop8"));
$this->_instance->unregister("prop7");
$this->assertEquals(null, $this->_instance->getProperty("prop7"));
$this->assertEquals("val8", $this->_instance->getProperty("prop8"));
}
public function unregisterAll() {
$this->_instance->registerAll(array("prop9" => "val9", "prop10" => "val10"));
$this->assertEquals("val9", $this->_instance->getProperty("prop9"));
$this->assertEquals("val10", $this->_instance->getProperty("prop10"));
$this->assertEquals("val11", $this->_instance->getProperty("prop11"));
$this->_instance->unregisterAll(array("prop9", "prop10"));
$this->assertEquals(null, $this->_instance->getProperty("prop9"));
$this->assertEquals(null, $this->_instance->getProperty("prop10"));
$this->assertEquals("val11", $this->_instance->getProperty("prop11"));
}
public function testCreateAlias() {
$distinct_id = 1;
$alias = 2;
$msg = $this->_instance->createAlias($distinct_id, $alias);
$this->assertEquals('$create_alias', $msg['event']);
$this->assertEquals($distinct_id, $msg['properties']['distinct_id']);
$this->assertEquals($alias, $msg['properties']['alias']);
}
public function testCreateAliasRespectsConsumerSetting() {
$tmp_file = __DIR__ . '/test.tmp';
$this->assertFileNotExists($tmp_file);
$options = array('consumer' => 'file', 'file' => $tmp_file);
$instance = new Producers_MixpanelEvents('token', $options);
try {
$instance->createAlias(1, 2);
$this->assertStringEqualsFile($tmp_file, '[{"event":"$create_alias","properties":{"distinct_id":1,"alias":2,"token":"token"}}]' . PHP_EOL);
} catch (Exception $e) {
unlink($tmp_file);
throw $e;
}
unlink($tmp_file);
}
public function testIdentifyInvalidAnonId() {
$user_id = 1;
$anon_id = 111;
$this->_instance->identify($user_id, $anon_id);
$queue = $this->_instance->getQueue();
$this->assertEquals(0, count($queue));
}
public function testIdentifyValidAnonId() {
$user_id = 1;
$anon_id = '2c93fdf3-4fbf-4fec-baaf-136ce87c13cc';
$test = $this->_instance->identify($user_id, $anon_id);
$queue = $this->_instance->getQueue();
$this->assertEquals(1, count($queue));
$this->assertEquals('$identify', $queue[0]['event']);
$this->assertEquals($user_id, $queue[0]['properties']['$identified_id']);
$this->assertEquals($anon_id, $queue[0]['properties']['$anon_id']);
}
public function testIdentifyValidAnonIdLong() {
$user_id = 1;
$anon_id = '13bbf7943e584-0885c2531-5c793977-3e8000-13bbf7943e64cf';
$test = $this->_instance->identify($user_id, $anon_id);
$queue = $this->_instance->getQueue();
$this->assertEquals(1, count($queue));
$this->assertEquals('$identify', $queue[0]['event']);
$this->assertEquals($user_id, $queue[0]['properties']['$identified_id']);
$this->assertEquals($anon_id, $queue[0]['properties']['$anon_id']);
}
public function testIdentifyNoAnonId() {
$user_id = 1;
$test = $this->_instance->identify($user_id);
$queue = $this->_instance->getQueue();
$this->assertEquals(0, count($queue));
}
}

View File

@ -0,0 +1,117 @@
<?php
class MixpanelGroupsProducerTest extends PHPUnit_Framework_TestCase {
/**
* @var Producers_MixpanelGroups
*/
protected $_instance = null;
protected function setUp()
{
parent::setUp();
$this->_instance = new Producers_MixpanelGroups("token");
}
protected function tearDown()
{
parent::tearDown();
$this->_instance->reset();
$this->_instance = null;
}
public function testSet() {
$this->_instance->set("company","Mixpanel", array("industry" => "tech"));
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals("company", $msg['$group_key']);
$this->assertEquals("Mixpanel", $msg['$group_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertArrayNotHasKey('$ignore_time', $msg);
$this->assertArrayHasKey('$set', $msg);
$this->assertArrayHasKey("industry", $msg['$set']);
$this->assertEquals("tech", $msg['$set']['industry']);
}
public function testSetIgnoreTime() {
$this->_instance->set("company","Mixpanel", array("industry" => "Tech"), true);
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals("company", $msg['$group_key']);
$this->assertEquals("Mixpanel", $msg['$group_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals(true, $msg['$ignore_time']);
$this->assertArrayHasKey('$set', $msg);
$this->assertArrayHasKey("industry", $msg['$set']);
$this->assertEquals("Tech", $msg['$set']['industry']);
}
public function testSetOnce() {
$this->_instance->setOnce("company","Mixpanel", array("industry" => "Tech"), true);
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals("company", $msg['$group_key']);
$this->assertEquals("Mixpanel", $msg['$group_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertArrayHasKey('$set_once', $msg);
$this->assertArrayHasKey("industry", $msg['$set_once']);
$this->assertEquals("Tech", $msg['$set_once']['industry']);
}
public function testUnionSingle() {
$this->_instance->union("company","Mixpanel", "actions", "Logged In");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals("company", $msg['$group_key']);
$this->assertEquals("Mixpanel", $msg['$group_id']);
$this->assertArrayHasKey('$union', $msg);
$this->assertArrayHasKey("actions", $msg['$union']);
$this->assertEquals("Logged In", $msg['$union']['actions']);
}
public function testUnionMultiple() {
$this->_instance->union("company","Mixpanel", "actions", array("Logged In", "Logged Out"));
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals("company", $msg['$group_key']);
$this->assertEquals("Mixpanel", $msg['$group_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertArrayHasKey('$union', $msg);
$this->assertArrayHasKey("actions", $msg['$union']);
$this->assertEquals(array("Logged In", "Logged Out"), $msg['$union']['actions']);
}
public function testRemove() {
$this->_instance->remove("company","Mixpanel", array("industry" => "tech"));
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals("company", $msg['$group_key']);
$this->assertEquals("Mixpanel", $msg['$group_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertArrayNotHasKey('$ignore_time', $msg);
$this->assertArrayHasKey('$unset', $msg);
$this->assertArrayHasKey("industry", $msg['$unset']);
$this->assertEquals("tech", $msg['$unset']['industry']);
}
public function testDeleteGroup() {
$this->_instance->deleteGroup("company","Mixpanel");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals("company", $msg['$group_key']);
$this->assertEquals("Mixpanel", $msg['$group_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertArrayHasKey('$delete', $msg);
$this->assertEquals("", $msg['$delete']);
}
}

View File

@ -0,0 +1,162 @@
<?php
class MixpanelPeopleProducerTest extends PHPUnit_Framework_TestCase {
/**
* @var Producers_MixpanelPeople
*/
protected $_instance = null;
protected function setUp()
{
parent::setUp();
$this->_instance = new Producers_MixpanelPeople("token");
}
protected function tearDown()
{
parent::tearDown();
$this->_instance->reset();
$this->_instance = null;
}
public function testSet() {
$this->_instance->set(12345, array("name" => "John"), "192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayNotHasKey('$ignore_time', $msg);
$this->assertArrayNotHasKey('$ignore_alias', $msg);
$this->assertArrayHasKey('$set', $msg);
$this->assertArrayHasKey("name", $msg['$set']);
$this->assertEquals("John", $msg['$set']['name']);
}
public function testSetIgnoreTime() {
$this->_instance->set(12345, array("name" => "John"), "192.168.0.1", true);
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertEquals(true, $msg['$ignore_time']);
$this->assertArrayHasKey('$set', $msg);
$this->assertArrayHasKey("name", $msg['$set']);
$this->assertEquals("John", $msg['$set']['name']);
}
public function testSetIgnoreAlias() {
$this->_instance->set(12345, array("name" => "John"), "192.168.0.1", false, true);
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayNotHasKey('$ignore_time', $msg);
$this->assertEquals(true, $msg['$ignore_alias']);
$this->assertArrayHasKey('$set', $msg);
$this->assertArrayHasKey("name", $msg['$set']);
$this->assertEquals("John", $msg['$set']['name']);
}
public function testSetOnce() {
$this->_instance->setOnce(12345, array("name" => "John"), "192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayHasKey('$set_once', $msg);
$this->assertArrayHasKey("name", $msg['$set_once']);
$this->assertEquals("John", $msg['$set_once']['name']);
}
public function testIncrement() {
$this->_instance->increment(12345, "logins", 1, "192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayHasKey('$add', $msg);
$this->assertArrayHasKey("logins", $msg['$add']);
$this->assertEquals(1, $msg['$add']['logins']);
}
public function testAppendSingle() {
$this->_instance->append(12345, "actions", "Logged In", "192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayHasKey('$append', $msg);
$this->assertArrayHasKey("actions", $msg['$append']);
$this->assertEquals("Logged In", $msg['$append']['actions']);
}
public function testAppendMultiple() {
$this->_instance->append(12345, "actions", array("Logged In", "Logged Out"), "192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayHasKey('$union', $msg);
$this->assertArrayHasKey("actions", $msg['$union']);
$this->assertEquals(array("Logged In", "Logged Out"), $msg['$union']['actions']);
}
public function testTrackCharge() {
date_default_timezone_set("America/Los_Angeles");
$time = time();
$this->_instance->trackCharge(12345, "20.00", $time, "192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayHasKey('$append', $msg);
$this->assertArrayHasKey('$transactions', $msg['$append']);
$this->assertArrayHasKey('$amount', $msg['$append']['$transactions']);
$this->assertArrayHasKey('$time', $msg['$append']['$transactions']);
$this->assertEquals("20.00", $msg['$append']['$transactions']['$amount']);
$this->assertEquals(date("c", $time), $msg['$append']['$transactions']['$time']);
}
public function testClearCharges() {
$this->_instance->clearCharges(12345,"192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayHasKey('$set', $msg);
$this->assertArrayHasKey('$transactions', $msg['$set']);
$this->assertSameSize(array(), $msg['$set']['$transactions']);
}
public function testDeleteUser() {
$this->_instance->deleteUser(12345,"192.168.0.1");
$queue = $this->_instance->getQueue();
$msg = $queue[count($queue)-1];
$this->assertEquals(12345, $msg['$distinct_id']);
$this->assertEquals("token", $msg['$token']);
$this->assertEquals("192.168.0.1", $msg['$ip']);
$this->assertArrayHasKey('$delete', $msg);
$this->assertEquals("", $msg['$delete']);
}
}