/** * A method to test the compensatedPriorities() method. * * Requirements - NO PAST AD INFO * Test 1: Test with a zone of zero available impressions, and no linked ads, and * ensure the returned ads array is empty, and the initial blank impression * is one. * Test 2: Test with a zone of > zero available impressions, and no linked ads, and * ensure the returned ads array is empty, and the initial blank impression * is one. * Test 3: Test with a zone of zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 4: Test with a zone of > zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 5: Test with a zone of zero available impressions, and linked ads with > zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 6: Test with a zone of > zero available impressions, and linked ads with > zero * required impressions, and ensure the returned priorities are correctly * calculcated and scaled. * * Requirements - WITH PAST AD INFO * Test 7: Test with a zone of zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 8: Test with a zone of > zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 9: Test with a zone of zero available impressions, and linked ads with > zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 10: Test with a zone of > zero available impressions, and linked ads with > zero * required impressions, but no past zone information, and ensure the returned * priorities are correctly calculcated and scaled. * Test 11: Test with a zone of > zero available impressions, and linked ads with > zero * required impressions, with past zone information, and ensure the returned * priorities are correctly calculcated and scaled. * Test 12: Test with a factor that will be limited. * Test 13: Test with a factor that would be limited, but with deliveryLimitationChanged * set and ensure that the priority factor is reset */ function testCompensatedPriorities() { // Mock the OA_Dal_Maintenance_Priority class used in the constructor method $oDal = new $this->mockDal($this); $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->register('OA_Dal_Maintenance_Priority', $oDal); // Partially mock the OA_Maintenance_Priority_AdServer_Task_PriorityCompensation class $oPriorityCompensation = new PartialMock_OA_Maintenance_Priority_AdServer_Task_PriorityCompensation($this); $oPriorityCompensation->setReturnReference('_getDal', $oDal); $oPriorityCompensation->setReturnReference('_getOperationIntUtils', $oOperationInterval); $oPriorityCompensation->__construct(); // Test 1 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 0); $this->assertEqual($result['blank'], 1); // Test 2 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 0); $this->assertEqual($result['blank'], 1); // Test 3 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 4 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); $this->assertEqual($result['blank'], 1); // Test 5 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 6 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.1); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.2); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.3); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.4); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 0); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 200; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.05); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.1); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.15); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.2); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 0.5); // Test 7 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 8 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 9 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 10 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.1); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.2); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.3); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.4); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['blank'], 0); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 400; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.025); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.05); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.075); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.1); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['blank'], 0.75); // Test 11 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 20; $oAd->pastRequestedImpressions = 20; $oAd->pastActualImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 30; $oAd->pastRequestedImpressions = 30; $oAd->pastActualImpressions = 15; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 40; $oAd->pastRequestedImpressions = 40; $oAd->pastActualImpressions = 20; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.1); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][1]['past_zone_traffic_fraction'], 0.05); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.2); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['past_zone_traffic_fraction'], 0.1); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.3); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['past_zone_traffic_fraction'], 0.15); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.4); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['past_zone_traffic_fraction'], 0.2); $this->assertEqual($result['blank'], 0); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 400; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.025); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.05); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.075); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.1); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['blank'], 0.75); // Test 12 $value = 1.2 * mt_getrandmax(); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $value; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = $value; $oAd->requestedImpressions = $value; $oAd->pastRequiredImpressions = $value; $oAd->pastRequestedImpressions = $value; $oAd->pastActualImpressions = 1; $oAd->pastZoneTrafficFraction = 0; $oAd->pastAdZonePriorityFactor = 1; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 1); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 1); $this->assertEqual($result['ads'][1]['required_impressions'], $value); $this->assertEqual($result['ads'][1]['requested_impressions'], $value); $this->assertEqual($result['ads'][1]['priority_factor'], 1 + (mt_getrandmax() - 1) / 2); $this->assertTrue($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][1]['past_zone_traffic_fraction'], 1 / $value); $this->assertEqual($result['blank'], 0); // Test 13 $value = 1.2 * mt_getrandmax(); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $value; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->deliveryLimitationChanged = true; $oAd->requiredImpressions = $value; $oAd->requestedImpressions = $value; $oAd->pastRequiredImpressions = $value; $oAd->pastRequestedImpressions = $value; $oAd->pastActualImpressions = 1; $oAd->pastZoneTrafficFraction = 0; $oAd->pastAdZonePriorityFactor = 1; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 1); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 1); $this->assertEqual($result['ads'][1]['required_impressions'], $value); $this->assertEqual($result['ads'][1]['requested_impressions'], $value); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 0); }
/** * Method to test the getPreviousAdDeliveryInfo method. * * Requirements: * Test 1: Test with no Date registered in the service locator, ensure false returned. * Test 2: Test with a Date registered in the service locator, no data in the database, * and ensure no data is returned. * * Test 3: Test with ONLY impression data, but NOT in the previous OI, and ensure no * data is returned. * Test 4: Test with ONLY impression data, in the previous OI, and ensure that ONLY * data relating to the impressions is returned. * Test 5: Test with ONLY impression data, in the 2nd previous OI, and ensure that * no data is returned. * Test 5a: Re-test with ONLY impression data, in the 2nd previous OI, but pass in the * ad/zone pair, and ensure that no data is returned. * * Test 6: Test with ONLY prioritisation data, but NOT in the previous OI, and * ensure no data is returned. * Test 7: Test with ONLY prioritisation data, in the previous OI, and ensure that * ONLY data relating to the prioritisation is returned. * Test 8: Test with ONLY prioritisation data, in the 2nd previous OI, and ensure no * data is returned. * Test 8a: Re-test with ONLY prioritisation data, in the 2nd previous OI, but pass in * the ad/zone pair, and ensure that ONLY data relating to the prioritisation * is returned. * * Test 9: Test with BOTH impressions data NOT in the previous OI, and prioritisation * data NOT in the previous OI, and ensure no data is returned. * Test 10: Test with BOTH impressions data NOT in the previous OI, and prioritisation * data in the previous OI, and ensure ONLY data relating to the prioritisation * is returned. * Test 11: Test with BOTH impressions data NOT in the previous OI, and prioritisation * data in the 2nd previous OI, and ensure no data is returned. * Test 11a: Re-test with BOTH impressions data NOT in the previous OI, and prioritisation * data in the 2nd previous OI, but pass in the ad/zone pair, and ensure that * ONLY data relating to the prioritisation is returned. * * Test 12: Test with BOTH impressions data in the 2nd previous OI, and prioritisation * data NOT in the previous OI, and ensure no data is returned. * Test 13: Test with BOTH impressions data in the 2nd previous OI, and prioritisation * data in the previous OI, and ensure ONLY data relating to the prioritisation * is returned. * Test 14: Test with BOTH impressions data in the 2nd previous OI, and prioritisation * data in the 2nd previous OI, and ensure no data is returned. * Test 14a: Re-test with BOTH impressions data in the 2nd previous OI, and prioritisation * data in the 2nd previous OI, but pass in the ad/zone pair, and ensure that * all data is returned. * * Test 15: Test with BOTH impressions data in the previous OI, and prioritisation * data NOT in the previous OI, and ensure that ONLY data relating to the * impressions is returned. * Test 16: Test with BOTH impressions data in the previous OI, and prioritisation * data in the previous OI, and ensure that all data is returned. * Test 17: Test with BOTH impressions data in the previous OI, and prioritisation * data in the 2nd previous OI, and ensure that all data is returned. * Test 17a: Re-test with BOTH impressions data in the previous OI, and prioritisation * data in the 2nd previous OI, but pass in the ad/zone pair, and ensure that * all data is returned. * * Test 18: Perform a more realistic test, with data for the ads/zones in various * past OIs, and including some ads with multiple prioritisation data * per OI, as well as ads with no prioritisation data in some OIs, and * ensure that the correct values are returned for each one. Test that: * - Only ad/zones that delivered in the previous operation interval, * or were requested to deliver in the previous operation interval, * but didn't (i.e. not in other intervals) are returned in the * results. * - That prioritisation information where just ONE set of data exists * is returned correctly. * - That prioritisation information where multiple sets of INDENTICAL * data exists is returned correctly. * - That prioritisation information where multiple sets of DIFFERENT * data exists is returned correctly. * - That prioritisation information from older sets of data is * returned correctly. * Test 18a: Re-test, but also include ad/zone pairs that are in/not in the above * set of data, and ensure that these ad/zone pairs are also included * in the results. */ function testGetPreviousAdDeliveryInfo() { $conf = $GLOBALS['_MAX']['CONF']; $oDbh =& OA_DB::singleton(); $oMaxDalMaintenance = new OA_Dal_Maintenance_Priority(); $aEmptyZoneAdArray = array(); $aAdParams = array('ad_id' => 1, 'active' => 't', 'type' => 'sql', 'weight' => 1); $oAd = new OA_Maintenance_Priority_Ad($aAdParams); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->addAdvert($oAd); $aZoneAdArray = array($oZone->id => $oZone); // Test 1 $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->remove('now'); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertFalse($result); // Test 2 $oDate = new Date(); $oServiceLocator->register('now', $oDate); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); // Test 3 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $oNow = new Date(); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 4 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertNull($result[1][1]['required_impressions']); $this->assertNull($result[1][1]['requested_impressions']); $this->assertNull($result[1][1]['priority_factor']); $this->assertNull($result[1][1]['past_zone_traffic_fraction']); $this->assertEqual($result[1][1]['impressions'], 1); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 5, 5a $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aZoneAdArray); $this->assertEqual(count($result), 0); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 6 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0.1, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 7 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertNull($result[1][1]['impressions']); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 8, 8a $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertNull($result[1][1]['impressions']); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 9 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 10 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertNull($result[1][1]['impressions']); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 11, 11a $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertNull($result[1][1]['impressions']); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 12 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 13 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertNull($result[1][1]['impressions']); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 14, 14a $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 0); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertEqual($result[1][1]['impressions'], 1); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 15 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertNull($result[1][1]['required_impressions']); $this->assertNull($result[1][1]['requested_impressions']); $this->assertNull($result[1][1]['priority_factor']); $this->assertNull($result[1][1]['past_zone_traffic_fraction']); $this->assertEqual($result[1][1]['impressions'], 1); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 16 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertEqual($result[1][1]['impressions'], 1); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 17, 17a $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 1, 1, 1, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertEqual($result[1][1]['impressions'], 1); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aZoneAdArray); $this->assertEqual(count($result), 1); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertEqual($result[1][1]['required_impressions'], 1); $this->assertEqual($result[1][1]['requested_impressions'], 1); $this->assertEqual($result[1][1]['priority_factor'], 0.5); $this->assertEqual($result[1][1]['past_zone_traffic_fraction'], 0.99); $this->assertEqual($result[1][1]['impressions'], 1); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 18 $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 2, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $bannerId2 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 3, 2, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 4, 2, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $bannerId3 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId3, 0, 5, 5, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 100, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 2, 100, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 3, 200, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 4, 200, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId3, 0, 5, 500, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), 4, 0, 5, 500, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $oSpecialDate = new Date($aDates['end']); $oSpecialDate->addSeconds(1); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 2, 10, 10, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), 9, 9, 59, 59, 0, 95, 0.995, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 3, 30, 30, 0, 0.4, 0.5, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), 0, $aDates['end']->format('%Y-%m-%d %H:30:00')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 3, 30, 30, 0, 0.4, 0.5, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $aDates['end']->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 4, 10, 10, 0, 0.4, 0.5, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), 0, $aDates['end']->format('%Y-%m-%d %H:30:00')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 4, 20, 20, 0, 0.8, 0.5, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $oSpecialDate->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $oSpecialDate = new Date($aDates['end']); $oSpecialDate->addSeconds(1); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId3, 5, 200, 200, 0, 0.2, 0.95, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), 0, $aDates['end']->format('%Y-%m-%d %H:30:00')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId3, 5, 100, 100, 0, 0.4, 0.95, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $oSpecialDate->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray); $this->assertEqual(count($result), 4); $this->assertEqual(count($result[1]), 2); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertNull($result[1][1]['required_impressions']); $this->assertNull($result[1][1]['requested_impressions']); $this->assertNull($result[1][1]['priority_factor']); $this->assertNull($result[1][1]['past_zone_traffic_fraction']); $this->assertEqual($result[1][1]['impressions'], 1); $this->assertEqual($result[1][2]['ad_id'], $bannerId1); $this->assertEqual($result[1][2]['zone_id'], 2); $this->assertEqual($result[1][2]['required_impressions'], 10); $this->assertEqual($result[1][2]['requested_impressions'], 10); $this->assertEqual($result[1][2]['priority_factor'], 0.5); $this->assertEqual($result[1][2]['past_zone_traffic_fraction'], 0.99); $this->assertEqual($result[1][2]['impressions'], 1); $this->assertEqual(count($result[2]), 2); $this->assertEqual($result[2][3]['ad_id'], $bannerId2); $this->assertEqual($result[2][3]['zone_id'], 3); $this->assertEqual($result[2][3]['required_impressions'], 30); $this->assertEqual($result[2][3]['requested_impressions'], 30); $this->assertEqual($result[2][3]['priority_factor'], 0.4); $this->assertEqual($result[2][3]['past_zone_traffic_fraction'], 0.5); $this->assertEqual($result[2][3]['impressions'], 2); $this->assertEqual($result[2][4]['ad_id'], $bannerId2); $this->assertEqual($result[2][4]['zone_id'], 4); $this->assertEqual($result[2][4]['required_impressions'], 15); $this->assertEqual($result[2][4]['requested_impressions'], 15); $this->assertEqual($result[2][4]['priority_factor'], 0.6); $this->assertEqual($result[2][4]['past_zone_traffic_fraction'], 0.5); $this->assertEqual($result[2][4]['impressions'], 2); $this->assertEqual(count($result[3]), 1); $this->assertEqual($result[3][5]['ad_id'], $bannerId3); $this->assertEqual($result[3][5]['zone_id'], 5); $this->assertEqual($result[3][5]['required_impressions'], 150); $this->assertEqual($result[3][5]['requested_impressions'], 150); $this->assertEqual($result[3][5]['priority_factor'], 0.3); $this->assertEqual($result[3][5]['past_zone_traffic_fraction'], 0.95); $this->assertEqual($result[3][5]['impressions'], 5); $this->assertEqual(count($result[9]), 1); $this->assertEqual($result[9][9]['ad_id'], 9); $this->assertEqual($result[9][9]['zone_id'], 9); $this->assertEqual($result[9][9]['required_impressions'], 59); $this->assertEqual($result[9][9]['requested_impressions'], 59); $this->assertEqual($result[9][9]['priority_factor'], 95); $this->assertEqual($result[9][9]['past_zone_traffic_fraction'], 0.995); $this->assertNull($result[9][9]['impressions']); $oDate =& $oServiceLocator->get('now'); DataGenerator::cleanUp(); $oServiceLocator->register('now', $oDate); // Test 18a $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 4)); $aAdParams = array('ad_id' => 10, 'active' => 't', 'type' => 'sql', 'weight' => 1); $oAd = new OA_Maintenance_Priority_Ad($aAdParams); $oZone->addAdvert($oAd); $aAdParams = array('ad_id' => 11, 'active' => 't', 'type' => 'sql', 'weight' => 1); $oAd = new OA_Maintenance_Priority_Ad($aAdParams); $oZone->addAdvert($oAd); $aZoneAdArray = array($oZone->id => $oZone); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $bannerId1 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 2, 1, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $bannerId2 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 3, 2, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 4, 2, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $bannerId3 = $this->_insertCampaignBanner(); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId3, 0, 5, 5, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 100, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 2, 100, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 3, 200, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId2, 0, 4, 200, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId3, 0, 5, 500, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), 4, 0, 5, 500, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), 10, 0, 4, 1000, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); for ($i = 0; $i <= MINUTES_PER_WEEK / $conf['maintenance']['operationInterval']; $i++) { $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); } $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); for ($i = 0; $i <= MINUTES_PER_WEEK / $conf['maintenance']['operationInterval']; $i++) { $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); } $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), 11, 0, 4, 2000, $oNow->format('%Y-%m-%d %H:%M:%S')); $idDia = $this->_insertDataIntermediateAd($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $oSpecialDate = new Date($aDates['end']); $oSpecialDate->addSeconds(1); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId1, 2, 10, 10, 0, 0.5, 0.99, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), 9, 9, 59, 59, 0, 95, 0.995, $oNow->format('%Y-%m-%d %H:%M:%S'), 0); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 3, 30, 30, 0, 0.4, 0.5, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $oSpecialDate->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 3, 30, 30, 0, 0.4, 0.5, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $aDates['end']->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 4, 10, 10, 0, 0.4, 0.5, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), 0, $aDates['end']->format('%Y-%m-%d %H:30:00')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId2, 4, 20, 20, 0, 0.8, 0.5, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $oSpecialDate->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); $oSpecialDate = new Date($aDates['end']); $oSpecialDate->addSeconds(1); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId3, 5, 200, 200, 0, 0.2, 0.95, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), 0, $aDates['end']->format('%Y-%m-%d %H:30:00')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $bannerId3, 5, 100, 100, 0, 0.4, 0.95, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $oSpecialDate->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), 10, 4, 1000, 1000, 0, 1, 0.9, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $oSpecialDate->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID); for ($i = 0; $i <= MINUTES_PER_WEEK / $conf['maintenance']['operationInterval']; $i++) { $previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID); } $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate); for ($i = 0; $i <= MINUTES_PER_WEEK / $conf['maintenance']['operationInterval']; $i++) { $aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']); } $oSpecialDate = new Date($aDates['end']); $oSpecialDate->addSeconds(1); $aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), 11, 4, 2000, 2000, 0, 1, 0.9, $aDates['start']->format('%Y-%m-%d %H:30:00'), 0, $oSpecialDate->format('%Y-%m-%d %H:%M:%S')); $this->_insertDataSummaryAdZoneAssoc($aData); $result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aZoneAdArray); $this->assertEqual(count($result), 5); $this->assertEqual(count($result[1]), 2); $this->assertEqual($result[1][1]['ad_id'], $bannerId1); $this->assertEqual($result[1][1]['zone_id'], 1); $this->assertNull($result[1][1]['required_impressions']); $this->assertNull($result[1][1]['requested_impressions']); $this->assertNull($result[1][1]['priority_factor']); $this->assertNull($result[1][1]['past_zone_traffic_fraction']); $this->assertEqual($result[1][1]['impressions'], 1); $this->assertEqual($result[1][2]['ad_id'], $bannerId1); $this->assertEqual($result[1][2]['zone_id'], 2); $this->assertEqual($result[1][2]['required_impressions'], 10); $this->assertEqual($result[1][2]['requested_impressions'], 10); $this->assertEqual($result[1][2]['priority_factor'], 0.5); $this->assertEqual($result[1][2]['past_zone_traffic_fraction'], 0.99); $this->assertEqual($result[1][2]['impressions'], 1); $this->assertEqual(count($result[2]), 2); $this->assertEqual($result[2][3]['ad_id'], $bannerId2); $this->assertEqual($result[2][3]['zone_id'], 3); $this->assertEqual($result[2][3]['required_impressions'], 30); $this->assertEqual($result[2][3]['requested_impressions'], 30); $this->assertEqual($result[2][3]['priority_factor'], 0.4); $this->assertEqual($result[2][3]['past_zone_traffic_fraction'], 0.5); $this->assertEqual($result[2][3]['impressions'], 2); $this->assertEqual($result[2][4]['ad_id'], $bannerId2); $this->assertEqual($result[2][4]['zone_id'], 4); $this->assertEqual($result[2][4]['required_impressions'], 15); $this->assertEqual($result[2][4]['requested_impressions'], 15); $this->assertEqual($result[2][4]['priority_factor'], 0.6); $this->assertEqual($result[2][4]['past_zone_traffic_fraction'], 0.5); $this->assertEqual($result[2][4]['impressions'], 2); $this->assertEqual(count($result[3]), 1); $this->assertEqual($result[3][5]['ad_id'], $bannerId3); $this->assertEqual($result[3][5]['zone_id'], 5); $this->assertEqual($result[3][5]['required_impressions'], 150); $this->assertEqual($result[3][5]['requested_impressions'], 150); $this->assertEqual($result[3][5]['priority_factor'], 0.3); $this->assertEqual($result[3][5]['past_zone_traffic_fraction'], 0.95); $this->assertEqual($result[3][5]['impressions'], 5); $this->assertEqual(count($result[9]), 1); $this->assertEqual($result[9][9]['ad_id'], 9); $this->assertEqual($result[9][9]['zone_id'], 9); $this->assertEqual($result[9][9]['required_impressions'], 59); $this->assertEqual($result[9][9]['requested_impressions'], 59); $this->assertEqual($result[9][9]['priority_factor'], 95); $this->assertEqual($result[9][9]['past_zone_traffic_fraction'], 0.995); $this->assertNull($result[9][9]['impressions']); $this->assertEqual(count($result[10]), 1); $this->assertEqual($result[10][4]['ad_id'], 10); $this->assertEqual($result[10][4]['zone_id'], 4); $this->assertEqual($result[10][4]['required_impressions'], 1000); $this->assertEqual($result[10][4]['requested_impressions'], 1000); $this->assertEqual($result[10][4]['priority_factor'], 1); $this->assertEqual($result[10][4]['past_zone_traffic_fraction'], 0.9); $this->assertEqual($result[10][4]['impressions'], 1000); TestEnv::restoreEnv(); }
/** * A method to visually test the compensatedPriorities() method. * * Tests a series of operation intervals for a zone where some ads are limited * to appear only in certain "channels" of the zone, and display the results * graphically. Uses a changing number of impressions in the zone each operation * interval. */ function testCompensatedPrioritiesSharpChangingZoneInvetory() { $conf = $GLOBALS['_MAX']['CONF']; // Mock the OA_Dal_Maintenance_Priority class $oDal = new MockOA_Dal_Maintenance_Priority($this); $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->register('OA_Dal_Maintenance_Priority', $oDal); // Partially mock the OA_Maintenance_Priority_AdServer_Task_PriorityCompensation class $oPriorityCompensation = new PartialMock_OA_Maintenance_Priority_AdServer_Task_PriorityCompensation($this); $oPriorityCompensation->setReturnReference('_getDal', $oDal); $oPriorityCompensation->OA_Maintenance_Priority_AdServer_Task_PriorityCompensation(); // Define the number of iterations to test over $iterations = 48; // Define the maximum number of impressions in the zone $maxZoneImpressions = 10000; // Define the maximum number of impressions in the zone $minZoneImpressions = 1000; // Define the zone impression period $zoneImpressionPeriod = 24; // Define the channels, including the % of zone impressions in each $aChannels[1] = 0.1; // Channel 1: 10% of zone traffic $aChannels[2] = 0.02; // Channel 2: 2% of zone traffic // Define the ads, including the required impressions each iteration, // the channel the ad is limited to (if any) and the colour to use in // the graph of results $aAds[1] = array('impressions' => 5000, 'channel' => null, 'colour' => 'red'); $aAds[2] = array('impressions' => 1500, 'channel' => 1, 'colour' => 'blue'); $aAds[3] = array('impressions' => 750, 'channel' => 2, 'colour' => 'green'); // Preapare the graph data sets, ready to accept test data foreach ($aAds as $adKey => $aAdData) { // Add the new data to the graph of the results $dataSetName = 'oDataSet_Ad' . $adKey . '_RequiredImpressions'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Required Impressions'); $dataSetName = 'oDataSet_Ad' . $adKey . '_AvailableImpressions'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Available Impressions'); $dataSetName = 'oDataSet_Ad' . $adKey . '_ActualImpressions'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Delivered Impressions'); } $oDataSetBestError =& Image_Graph::factory('dataset'); $oDataSetBestError->setName('Least Possible Error In Delivery'); $oDataSetTotalError =& Image_Graph::factory('dataset'); $oDataSetTotalError->setName('Total Error In Delivery'); // Prepare the ads/zone for the initial iteration $thisZoneImpressions = $minZoneImpressions; $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $thisZoneImpressions; foreach ($aAds as $adKey => $aAdData) { $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => $adKey)); $oAd->requiredImpressions = $aAdData['impressions']; $oAd->requestedImpressions = $aAdData['impressions']; $oZone->addAdvert($oAd); } $result = $oPriorityCompensation->compensatedPriorities($oZone); // Perform the iterations for ($iteration = 1; $iteration <= $iterations; $iteration++) { // Calculate how many impressions will be delivered for each ad foreach ($aAds as $adKey => $aAdData) { $aDelivered[$adKey] = 0; } $this->_predictDelivery($aDelivered, $thisZoneImpressions, $aAds, $aChannels, $result, $oPriorityCompensation); // Add the new data to the graph of the results $bestError = 0; $totalError = 0; foreach ($aAds as $adKey => $aAdData) { $dataSetName = 'oDataSet_Ad' . $adKey . '_RequiredImpressions'; ${$dataSetName}->addPoint($iteration, $aAds[$adKey]['impressions']); $dataSetName = 'oDataSet_Ad' . $adKey . '_AvailableImpressions'; if (is_null($aAdData['channel'])) { ${$dataSetName}->addPoint($iteration, $thisZoneImpressions); } else { ${$dataSetName}->addPoint($iteration, $thisZoneImpressions * $aChannels[$aAdData['channel']]); } $dataSetName = 'oDataSet_Ad' . $adKey . '_ActualImpressions'; ${$dataSetName}->addPoint($iteration, $aDelivered[$adKey]); if (!is_null($aAdData['channel']) && $thisZoneImpressions * $aChannels[$aAdData['channel']] < $aAds[$adKey]['impressions']) { $bestError += abs($thisZoneImpressions * $aChannels[$aAdData['channel']] - $aAds[$adKey]['impressions']); } $totalError += abs($oZone->aAdverts[$adKey]->requiredImpressions - $aDelivered[$adKey]); } $oDataSetBestError->addPoint($iteration, $bestError); $oDataSetTotalError->addPoint($iteration, $totalError); // Prepare the ads/zone for the next iteration $previousZoneImpressions = $thisZoneImpressions; if ($iteration == 1) { $thisZoneImpressions = $this->_predictSharpZoneInventory($minZoneImpressions, $maxZoneImpressions, $zoneImpressionPeriod, $iteration); } else { $thisZoneImpressions = $this->_predictSharpZoneInventory($minZoneImpressions, $maxZoneImpressions, $zoneImpressionPeriod, $iteration); } $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $thisZoneImpressions; foreach ($aAds as $adKey => $aAdData) { $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => $adKey)); $oAd->requiredImpressions = $aAdData['impressions']; $oAd->requestedImpressions = $aAdData['impressions']; $oAd->pastRequiredImpressions = $aAdData['impressions']; $oAd->pastRequestedImpressions = $aAdData['impressions']; $oAd->pastActualImpressions = $aDelivered[$adKey]; $oAd->pastAdZonePriorityFactor = $result['ads'][$adKey]['priority_factor']; $oAd->pastZoneTrafficFraction = $result['ads'][$adKey]['past_zone_traffic_fraction']; $oZone->addAdvert($oAd); } $result = $oPriorityCompensation->compensatedPriorities($oZone); } // Prepare the graph $oCanvas =& Image_Canvas::factory('png', array('width' => 600, 'height' => 480, 'antialias' => false)); $oGraph =& Image_Graph::factory('graph', $oCanvas); if (function_exists('imagettfbbox') && isset($conf['graphs']['ttfName'])) { $oFont =& $oGraph->addNew('ttf_font', $conf['graphs']['ttfName']); $oFont->setSize(9); $oGraph->setFont($oFont); } $oGraph->add(Image_Graph::vertical(Image_Graph::factory('title', array('Priority Compensation in Fixed Impression Zone', 12)), Image_Graph::vertical($oPlotarea = Image_Graph::factory('plotarea', array('axis', 'axis_log')), $oLegend = Image_Graph::factory('legend'), 80), 10)); $oLegend->setPlotarea($oPlotarea); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_X); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_Y); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_X); $oAxis->setTitle('Operation Intervals'); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y); $oAxis->setTitle('Impressions', 'vertical'); $counter = 1; $aAxisLabels = array(); while ($counter < $maxZoneImpressions) { $counter *= 10; $aAxisLabels[] = $counter; } $oAxis->setLabelInterval($aAxisLabels); // Ad the data sets to the graph foreach ($aAds as $adKey => $aAdData) { $dataSetName = 'oDataSet_Ad' . $adKey . '_RequiredImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dashed', array($aAdData['colour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad' . $adKey . '_AvailableImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dotted', array($aAdData['colour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad' . $adKey . '_ActualImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oPlot->setLineColor($aAdData['colour']); } $oPlot =& $oPlotarea->addNew('line', $oDataSetBestError); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dotted', array('magenta', 'transparent')); $oPlot->setLineStyle($oLineStyle); $oPlot =& $oPlotarea->addNew('line', $oDataSetTotalError); $oPlot->setLineColor('magenta'); $oPlotarea->setFillColor('white'); $filename = "results/" . __CLASS__ . '_' . __FUNCTION__ . ".png"; $oGraph->done(array('filename' => MAX_PATH . '/tests/' . $filename)); echo '<img src="' . $filename . '" alt="" />' . "\n"; }
/** * A method to visually test the scaling back of the compensation factor. * * Performs a more relalistic version of the test above, with multiple ads, * and disabling of an ad during the operation of the zone. */ function testScaleBackComplex2() { $conf = $GLOBALS['_MAX']['CONF']; // Mock the OA_Dal_Maintenance_Priority class $oDal = new MockOA_Dal_Maintenance_Priority($this); $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->register('OA_Dal_Maintenance_Priority', $oDal); // Partially mock the OA_Maintenance_Priority_AdServer_Task_PriorityCompensation class $oPriorityCompensation = new PartialMock_OA_Maintenance_Priority_AdServer_Task_PriorityCompensationScaleBack($this); $oPriorityCompensation->setReturnReference('_getDal', $oDal); $oPriorityCompensation->OA_Maintenance_Priority_AdServer_Task_PriorityCompensation(); // Define the number of initial iterations to test over $initialIterations = 12; // Define how many impressions are in the zone in each initial iteration $initialZoneImpressions = 10; // Define the number of final iterations to test over $finalIterations = 24; // Define how many impressions are in the zone in each final iteration $finalZoneImpressions = 20000; // Define the channels, including the % of zone impressions in each $aChannels[1] = 0.1; // Channel 1: 10% of zone traffic $aChannels[2] = 0.05; // Channel 2: 5% of zone traffic // Define the test ads, giving the number of required impressions // each hour (fixed), the channel the ad is in (if any), and the // colour to graph the ad // The number of ads must not exceed ($initialZoneImpressions - 1) // or ($finalZoneImpressions - 1), to ensure that the values for // the requestedImpressions >= 1 for all ads $aAds[1] = array('requiredImpressions' => 5000, 'channel' => null, 'requiredColour' => '#AA00FF', 'requestedColour' => 'blue', 'availableColour' => 'black', 'deliveredColour' => 'green', 'priorityFactorColour' => 'red'); $aAds[2] = array('requiredImpressions' => 5000, 'channel' => 1, 'requiredColour' => '#AA00FF', 'requestedColour' => 'blue', 'availableColour' => 'black', 'deliveredColour' => 'green', 'priorityFactorColour' => 'red'); $aAds[3] = array('requiredImpressions' => 5000, 'channel' => 2, 'requiredColour' => '#AA00FF', 'requestedColour' => 'blue', 'availableColour' => 'black', 'deliveredColour' => 'green', 'priorityFactorColour' => 'red'); // Preapare the graph data sets, ready to accept test data foreach ($aAds as $adKey => $aAdData) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequiredImpressions'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Required Impressions'); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequestedImpressions'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Requested Impressions'); $dataSetName = 'oDataSet_Ad_' . $adKey . '_AvailableImpressions'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Available Impressions'); $dataSetName = 'oDataSet_Ad_' . $adKey . '_DeliveredImpressions'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Delivered Impressions'); $dataSetName = 'oDataSet_Ad_' . $adKey . '_PriorityFactor'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Priority Factor'); $dataSetName = 'oDataSet_Ad_' . $adKey . '_Priority'; ${$dataSetName} =& Image_Graph::factory('dataset'); ${$dataSetName}->setName('Ad ' . $adKey . ': Priority'); } // Prepare the zone/ads for the initial iterations $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $initialZoneImpressions; $zoneTotalRequired = 0; foreach ($aAds as $adKey => $aAdData) { $zoneTotalRequired += $aAdData['requiredImpressions']; } foreach ($aAds as $adKey => $aAdData) { $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => $adKey)); $oAd->requiredImpressions = $aAdData['requiredImpressions']; if ($zoneTotalRequired > $oZone->availableImpressions) { $oAd->requestedImpressions = floor(($oZone->availableImpressions - 1) / count($aAds)); } else { $oAd->requestedImpressions = $aAdData['requiredImpressions']; } $oZone->addAdvert($oAd); } $result = $oPriorityCompensation->compensatedPriorities($oZone); // Perform the initial iterations $oSavedZone; $zoneImpressions = $initialZoneImpressions; for ($iteration = 0; $iteration <= $initialIterations; $iteration++) { // As these are the initial iterations, no delivery of any ads (zone not active) foreach ($aAds as $adKey => $aAdData) { $aDelivered[$adKey] = 0; } // Add the new data to the graph of the results foreach ($aAds as $adKey => $aAdData) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequiredImpressions'; ${$dataSetName}->addPoint($iteration, $aAds[$adKey]['requiredImpressions']); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequestedImpressions'; ${$dataSetName}->addPoint($iteration, $result['ads'][$adKey]['requested_impressions']); $dataSetName = 'oDataSet_Ad_' . $adKey . '_AvailableImpressions'; if (is_null($aAdData['channel'])) { ${$dataSetName}->addPoint($iteration, $zoneImpressions); } else { ${$dataSetName}->addPoint($iteration, $zoneImpressions * $aChannels[$aAdData['channel']]); } $dataSetName = 'oDataSet_Ad_' . $adKey . '_DeliveredImpressions'; ${$dataSetName}->addPoint($iteration, $aDelivered[$adKey]); $dataSetName = 'oDataSet_Ad_' . $adKey . '_PriorityFactor'; ${$dataSetName}->addPoint($iteration, $result['ads'][$adKey]['priority_factor']); $dataSetName = 'oDataSet_Ad_' . $adKey . '_Priority'; ${$dataSetName}->addPoint($iteration, $result['ads'][$adKey]['priority']); } // Prepare the ads/zone for the next iteration $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $zoneImpressions; $zoneTotalRequired = 0; foreach ($aAds as $adKey => $aAdData) { $zoneTotalRequired += $aAdData['requiredImpressions']; } foreach ($aAds as $adKey => $aAdData) { $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => $adKey)); $oAd->requiredImpressions = $aAdData['requiredImpressions']; if ($zoneTotalRequired > $zoneImpressions) { $oAd->requestedImpressions = floor(($zoneImpressions - 1) / count($aAds)); } else { $oAd->requestedImpressions = $aAdData['requiredImpressions']; } $oAd->pastRequiredImpressions = $aAdData['requiredImpressions']; $oAd->pastRequestedImpressions = $result['ads'][$adKey]['requested_impressions']; $oAd->pastActualImpressions = $aDelivered[$adKey]; $oAd->pastAdZonePriorityFactor = $result['ads'][$adKey]['priority_factor']; $oAd->pastZoneTrafficFraction = $result['ads'][$adKey]['past_zone_traffic_fraction']; $oZone->addAdvert($oAd); } // Move to the next iteration $result = $oPriorityCompensation->compensatedPriorities($oZone); } // Prepare the zone/ads for the final iterations $zoneTotalRequired = 0; foreach ($aAds as $adKey => $aAdData) { $zoneTotalRequired += $aAdData['requiredImpressions']; } foreach ($aAds as $adKey => $aAdData) { $oAd =& $oZone->aAdverts[$adKey]; $oAd->requiredImpressions = $aAdData['requiredImpressions']; if ($zoneTotalRequired > $oZone->availableImpressions) { $oAd->requestedImpressions = floor(($oZone->availableImpressions - 1) / count($aAds)); } else { $oAd->requestedImpressions = $aAdData['requiredImpressions']; } } $result = $oPriorityCompensation->compensatedPriorities($oZone); // Perform the final iterations $zoneImpressions = $finalZoneImpressions; for ($iteration = $initialIterations + 1; $iteration <= $initialIterations + $finalIterations; $iteration++) { // As these are the final iteration, calculate delivery foreach ($aAds as $adKey => $aAdData) { $aDelivered[$adKey] = 0; } $this->_predictDelivery($aDelivered, $zoneImpressions, $aAds, $aChannels, $result, $oPriorityCompensation); // Add the new data to the graph of the results foreach ($aAds as $adKey => $aAdData) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequiredImpressions'; ${$dataSetName}->addPoint($iteration, $aAds[$adKey]['requiredImpressions']); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequestedImpressions'; ${$dataSetName}->addPoint($iteration, $result['ads'][$adKey]['requested_impressions']); $dataSetName = 'oDataSet_Ad_' . $adKey . '_AvailableImpressions'; if (is_null($aAdData['channel'])) { ${$dataSetName}->addPoint($iteration, $zoneImpressions); } else { ${$dataSetName}->addPoint($iteration, $zoneImpressions * $aChannels[$aAdData['channel']]); } $dataSetName = 'oDataSet_Ad_' . $adKey . '_DeliveredImpressions'; ${$dataSetName}->addPoint($iteration, $aDelivered[$adKey]); $dataSetName = 'oDataSet_Ad_' . $adKey . '_PriorityFactor'; ${$dataSetName}->addPoint($iteration, $result['ads'][$adKey]['priority_factor']); $dataSetName = 'oDataSet_Ad_' . $adKey . '_Priority'; ${$dataSetName}->addPoint($iteration, $result['ads'][$adKey]['priority']); } // Prepare the ads/zone for the next iteration $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $zoneImpressions; $zoneTotalRequired = 0; foreach ($aAds as $adKey => $aAdData) { if (!($iteration > ($initialIterations + $finalIterations) / 2 && $adKey == 2)) { $zoneTotalRequired += $aAdData['requiredImpressions']; } } foreach ($aAds as $adKey => $aAdData) { if (!($iteration > ($initialIterations + $finalIterations) / 2 && $adKey == 2)) { $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => $adKey)); $oAd->requiredImpressions = $aAdData['requiredImpressions']; if ($zoneTotalRequired > $zoneImpressions) { $oAd->requestedImpressions = floor(($zoneImpressions - 1) / count($aAds)); } else { $oAd->requestedImpressions = $aAdData['requiredImpressions']; } $oAd->pastRequiredImpressions = $aAdData['requiredImpressions']; $oAd->pastRequestedImpressions = $result['ads'][$adKey]['requested_impressions']; $oAd->pastActualImpressions = $aDelivered[$adKey]; $oAd->pastAdZonePriorityFactor = $result['ads'][$adKey]['priority_factor']; $oAd->pastZoneTrafficFraction = $result['ads'][$adKey]['past_zone_traffic_fraction']; $oZone->addAdvert($oAd); } } $result = $oPriorityCompensation->compensatedPriorities($oZone); } // Prepare the main graph $oCanvas =& Image_Canvas::factory('png', array('width' => 600, 'height' => 600, 'antialias' => false)); $oGraph =& Image_Graph::factory('graph', $oCanvas); if (function_exists('imagettfbbox') && isset($conf['graphs']['ttfName'])) { $oFont =& $oGraph->addNew('ttf_font', $conf['graphs']['ttfName']); $oFont->setSize(9); $oGraph->setFont($oFont); } $oGraph->add(Image_Graph::vertical(Image_Graph::factory('title', array('Priority Compensation in Fixed Impression Zone: Multi-Ad Complex Scale-Back Test', 12)), Image_Graph::vertical($oPlotarea = Image_Graph::factory('plotarea', array('axis', 'axis')), $oLegend = Image_Graph::factory('legend'), 90), 10)); $oLegend->setPlotarea($oPlotarea); $oPlotareaSecondary =& Image_Graph::factory('plotarea', array('axis', 'axis', IMAGE_GRAPH_AXIS_Y_SECONDARY)); $oGraph->add($oPlotareaSecondary); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_X); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_Y); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_X); $oAxis->setTitle('Operation Intervals'); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y); $oAxis->setTitle('Impressions', 'vertical'); $oAxis =& Image_Graph::factory('axis', IMAGE_GRAPH_AXIS_Y_SECONDARY); $oPlotarea->add($oAxis); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y_SECONDARY); $oAxis->setTitle('Priority Factor', 'vertical2'); // Ad the data sets to the graph foreach ($aAds as $adKey => $aAdData) { if ($adKey == 1) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_PriorityFactor'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}, IMAGE_GRAPH_AXIS_Y_SECONDARY); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['priorityFactorColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_DeliveredImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['deliveredColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_AvailableImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dashed', array($aAdData['availableColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequiredImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dashed', array($aAdData['requiredColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequestedImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dotted', array($aAdData['requestedColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); } } $oPlotarea->setFillColor('white'); $filename = "results/" . __CLASS__ . '_' . __FUNCTION__ . "1.png"; $oGraph->done(array('filename' => MAX_PATH . '/tests/' . $filename)); echo '<img src="' . $filename . '" alt=""/>' . "\n"; // Prepare the priority graph $oCanvas =& Image_Canvas::factory('png', array('width' => 600, 'height' => 600, 'antialias' => false)); $oGraph =& Image_Graph::factory('graph', $oCanvas); if (function_exists('imagettfbbox') && isset($conf['graphs']['ttfName'])) { $oFont =& $oGraph->addNew('ttf_font', $conf['graphs']['ttfName']); $oFont->setSize(9); $oGraph->setFont($oFont); } $oGraph->add(Image_Graph::vertical(Image_Graph::factory('title', array('Priority Compensation in Fixed Impression Zone: Multi-Ad Complex Scale-Back Test', 12)), Image_Graph::vertical($oPlotarea = Image_Graph::factory('plotarea', array('axis', 'axis')), $oLegend = Image_Graph::factory('legend'), 90), 10)); $oLegend->setPlotarea($oPlotarea); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_X); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_Y); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_X); $oAxis->setTitle('Operation Intervals'); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y); $oAxis->setTitle('Priority', 'vertical'); // Ad the data sets to the graph foreach ($aAds as $adKey => $aAdData) { if ($adKey == 1) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_Priority'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['priorityFactorColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); } } $oPlotarea->setFillColor('white'); $filename = "results/" . __CLASS__ . '_' . __FUNCTION__ . "2.png"; $oGraph->done(array('filename' => MAX_PATH . '/tests/' . $filename)); echo '<img src="' . $filename . '" alt=""/>' . "\n"; // Prepare the main graph $oCanvas =& Image_Canvas::factory('png', array('width' => 600, 'height' => 600, 'antialias' => false)); $oGraph =& Image_Graph::factory('graph', $oCanvas); if (function_exists('imagettfbbox') && isset($conf['graphs']['ttfName'])) { $oFont =& $oGraph->addNew('ttf_font', $conf['graphs']['ttfName']); $oFont->setSize(9); $oGraph->setFont($oFont); } $oGraph->add(Image_Graph::vertical(Image_Graph::factory('title', array('Priority Compensation in Fixed Impression Zone: Multi-Ad Complex Scale-Back Test', 12)), Image_Graph::vertical($oPlotarea = Image_Graph::factory('plotarea', array('axis', 'axis')), $oLegend = Image_Graph::factory('legend'), 90), 10)); $oLegend->setPlotarea($oPlotarea); $oPlotareaSecondary =& Image_Graph::factory('plotarea', array('axis', 'axis', IMAGE_GRAPH_AXIS_Y_SECONDARY)); $oGraph->add($oPlotareaSecondary); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_X); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_Y); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_X); $oAxis->setTitle('Operation Intervals'); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y); $oAxis->setTitle('Impressions', 'vertical'); $oAxis =& Image_Graph::factory('axis', IMAGE_GRAPH_AXIS_Y_SECONDARY); $oPlotarea->add($oAxis); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y_SECONDARY); $oAxis->setTitle('Priority Factor', 'vertical2'); // Ad the data sets to the graph foreach ($aAds as $adKey => $aAdData) { if ($adKey == 2) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_PriorityFactor'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}, IMAGE_GRAPH_AXIS_Y_SECONDARY); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['priorityFactorColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_DeliveredImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['deliveredColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_AvailableImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dashed', array($aAdData['availableColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequiredImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dashed', array($aAdData['requiredColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequestedImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dotted', array($aAdData['requestedColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); } } $oPlotarea->setFillColor('white'); $filename = "results/" . __CLASS__ . '_' . __FUNCTION__ . "3.png"; $oGraph->done(array('filename' => MAX_PATH . '/tests/' . $filename)); echo '<img src="' . $filename . '" alt=""/>' . "\n"; // Prepare the priority graph $oCanvas =& Image_Canvas::factory('png', array('width' => 600, 'height' => 600, 'antialias' => false)); $oGraph =& Image_Graph::factory('graph', $oCanvas); if (function_exists('imagettfbbox') && isset($conf['graphs']['ttfName'])) { $oFont =& $oGraph->addNew('ttf_font', $conf['graphs']['ttfName']); $oFont->setSize(9); $oGraph->setFont($oFont); } $oGraph->add(Image_Graph::vertical(Image_Graph::factory('title', array('Priority Compensation in Fixed Impression Zone: Multi-Ad Complex Scale-Back Test', 12)), Image_Graph::vertical($oPlotarea = Image_Graph::factory('plotarea', array('axis', 'axis')), $oLegend = Image_Graph::factory('legend'), 90), 10)); $oLegend->setPlotarea($oPlotarea); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_X); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_Y); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_X); $oAxis->setTitle('Operation Intervals'); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y); $oAxis->setTitle('Priority', 'vertical'); // Ad the data sets to the graph foreach ($aAds as $adKey => $aAdData) { if ($adKey == 2) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_Priority'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['priorityFactorColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); } } $oPlotarea->setFillColor('white'); $filename = "results/" . __CLASS__ . '_' . __FUNCTION__ . "4.png"; $oGraph->done(array('filename' => MAX_PATH . '/tests/' . $filename)); echo '<img src="' . $filename . '" alt=""/>' . "\n"; // Prepare the main graph $oCanvas =& Image_Canvas::factory('png', array('width' => 600, 'height' => 600, 'antialias' => false)); $oGraph =& Image_Graph::factory('graph', $oCanvas); if (function_exists('imagettfbbox') && isset($conf['graphs']['ttfName'])) { $oFont =& $oGraph->addNew('ttf_font', $conf['graphs']['ttfName']); $oFont->setSize(9); $oGraph->setFont($oFont); } $oGraph->add(Image_Graph::vertical(Image_Graph::factory('title', array('Priority Compensation in Fixed Impression Zone: Multi-Ad Complex Scale-Back Test', 12)), Image_Graph::vertical($oPlotarea = Image_Graph::factory('plotarea', array('axis', 'axis')), $oLegend = Image_Graph::factory('legend'), 90), 10)); $oLegend->setPlotarea($oPlotarea); $oPlotareaSecondary =& Image_Graph::factory('plotarea', array('axis', 'axis', IMAGE_GRAPH_AXIS_Y_SECONDARY)); $oGraph->add($oPlotareaSecondary); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_X); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_Y); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_X); $oAxis->setTitle('Operation Intervals'); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y); $oAxis->setTitle('Impressions', 'vertical'); $oAxis =& Image_Graph::factory('axis', IMAGE_GRAPH_AXIS_Y_SECONDARY); $oPlotarea->add($oAxis); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y_SECONDARY); $oAxis->setTitle('Priority Factor', 'vertical2'); // Ad the data sets to the graph foreach ($aAds as $adKey => $aAdData) { if ($adKey == 3) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_PriorityFactor'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}, IMAGE_GRAPH_AXIS_Y_SECONDARY); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['priorityFactorColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_DeliveredImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['deliveredColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_AvailableImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dashed', array($aAdData['availableColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequiredImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dashed', array($aAdData['requiredColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); $dataSetName = 'oDataSet_Ad_' . $adKey . '_RequestedImpressions'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Dotted', array($aAdData['requestedColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); } } $oPlotarea->setFillColor('white'); $filename = "results/" . __CLASS__ . '_' . __FUNCTION__ . "5.png"; $oGraph->done(array('filename' => MAX_PATH . '/tests/' . $filename)); echo '<img src="' . $filename . '" alt=""/>' . "\n"; // Prepare the priority graph $oCanvas =& Image_Canvas::factory('png', array('width' => 600, 'height' => 600, 'antialias' => false)); $oGraph =& Image_Graph::factory('graph', $oCanvas); if (function_exists('imagettfbbox') && isset($conf['graphs']['ttfName'])) { $oFont =& $oGraph->addNew('ttf_font', $conf['graphs']['ttfName']); $oFont->setSize(9); $oGraph->setFont($oFont); } $oGraph->add(Image_Graph::vertical(Image_Graph::factory('title', array('Priority Compensation in Fixed Impression Zone: Multi-Ad Complex Scale-Back Test', 12)), Image_Graph::vertical($oPlotarea = Image_Graph::factory('plotarea', array('axis', 'axis')), $oLegend = Image_Graph::factory('legend'), 90), 10)); $oLegend->setPlotarea($oPlotarea); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_X); $oGridLines =& $oPlotarea->addNew('line_grid', array(), IMAGE_GRAPH_AXIS_Y); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_X); $oAxis->setTitle('Operation Intervals'); $oAxis =& $oPlotarea->getAxis(IMAGE_GRAPH_AXIS_Y); $oAxis->setTitle('Priority', 'vertical'); // Ad the data sets to the graph foreach ($aAds as $adKey => $aAdData) { if ($adKey == 3) { $dataSetName = 'oDataSet_Ad_' . $adKey . '_Priority'; $oPlot =& $oPlotarea->addNew('line', ${$dataSetName}); $oLineStyle =& Image_Graph::factory('Image_Graph_Line_Solid', array($aAdData['priorityFactorColour'], 'transparent')); $oPlot->setLineStyle($oLineStyle); } } $oPlotarea->setFillColor('white'); $filename = "results/" . __CLASS__ . '_' . __FUNCTION__ . "6.png"; $oGraph->done(array('filename' => MAX_PATH . '/tests/' . $filename)); echo '<img src="' . $filename . '" alt=""/>' . "\n"; }