/** * Method to test the updatePriorities method. * * Test 1: Test with no Date registered in the service locator, ensure false returned. * Test 2: Test with no data in the database, ensure data is correctly stored. * Test 3: Test with previous test data in the database, ensure data is correctly stored. * Test 4: Test with an obscene number of items, and ensure that the packet size is * not exceeded (no asserts, test suite will simply fail if unable to work). */ function testUpdatePriorities() { /** * @TODO Locate where clean up doesn't happen before this test, and fix! */ TestEnv::restoreEnv(); $conf = $GLOBALS['_MAX']['CONF']; $oDbh =& OA_DB::singleton(); $oMaxDalMaintenance = new OA_Dal_Maintenance_Priority(); // Insert the data into the ad_zone_assoc table, as an ad is linked to a zone $this->_generateTestData(); // Test 1 $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->remove('now'); $aData = array(array('ads' => array(array('ad_id' => $this->aIds['ad'], 'zone_id' => $this->aIds['zone'], 'required_impressions' => '1000', 'requested_impressions' => '1000', 'priority' => '0.45', 'priority_factor' => null, 'priority_factor_limited' => false, 'past_zone_traffic_fraction' => null)))); $result = $oMaxDalMaintenance->updatePriorities($aData); $this->assertFalse($result); // Test 2 $oDate = new Date(); $oServiceLocator->register('now', $oDate); $result = $oMaxDalMaintenance->updatePriorities($aData); $this->assertTrue($result); $query = "\n SELECT\n ad_id,\n zone_id,\n priority\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']} AND zone_id = {$this->aIds['zone']}"; $rc = $oDbh->query($query); $aRow = $rc->fetchRow(); $this->assertEqual($aRow['ad_id'], $this->aIds['ad']); $this->assertEqual($aRow['zone_id'], $this->aIds['zone']); $this->assertEqual($aRow['priority'], 0.45); $query = "\n SELECT\n operation_interval,\n operation_interval_id,\n interval_start,\n interval_end,\n ad_id,\n zone_id,\n required_impressions,\n requested_impressions,\n priority,\n priority_factor,\n priority_factor_limited,\n past_zone_traffic_fraction,\n created,\n created_by,\n expired,\n expired_by\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['data_summary_ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']}"; $rc = $oDbh->query($query); $aRow = $rc->fetchRow(); $currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $this->assertEqual($aRow['operation_interval'], $conf['maintenance']['operationInterval']); $this->assertEqual($aRow['operation_interval_id'], $currentOperationIntervalID); $this->assertEqual($aRow['interval_start'], $aDates['start']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['interval_end'], $aDates['end']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['ad_id'], $this->aIds['ad']); $this->assertEqual($aRow['zone_id'], $this->aIds['zone']); $this->assertEqual($aRow['required_impressions'], 1000); $this->assertEqual($aRow['requested_impressions'], 1000); $this->assertEqual($aRow['priority'], 0.45); $this->assertNull($aRow['priority_factor']); $this->assertFalse($aRow['priority_factor_limited']); $this->assertNull($aRow['past_zone_traffic_fraction']); $this->assertEqual($aRow['created'], $oDate->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['created_by'], 0); $this->assertNull($aRow['expired']); $this->assertNull($aRow['expired_by']); // Test 3 $aData = array(array('ads' => array(array('ad_id' => $this->aIds['ad'], 'zone_id' => $this->aIds['zone'], 'required_impressions' => 2000, 'requested_impressions' => 2000, 'priority' => 0.9, 'priority_factor' => 0.1, 'priority_factor_limited' => false, 'past_zone_traffic_fraction' => 0.99), array('ad_id' => $this->aIds['ad'] + 1, 'zone_id' => $this->aIds['ad'] + 1, 'required_impressions' => 500, 'requested_impressions' => 500, 'priority' => 0.1, 'priority_factor' => 0.2, 'priority_factor_limited' => true, 'past_zone_traffic_fraction' => 0.45)))); $oOldDate = new Date(); $oOldDate->copy($oDate); $oDate = new Date(); $oServiceLocator->register('now', $oDate); $result = $oMaxDalMaintenance->updatePriorities($aData); $this->assertTrue($result); $query = "\n SELECT\n ad_id,\n zone_id,\n priority\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']} AND zone_id = {$this->aIds['zone']}"; $rc = $oDbh->query($query); $aRow = $rc->fetchRow(); $this->assertEqual($aRow['ad_id'], $this->aIds['ad']); $this->assertEqual($aRow['zone_id'], $this->aIds['zone']); $this->assertEqual($aRow['priority'], 0.9); $query = "\n SELECT\n operation_interval,\n operation_interval_id,\n interval_start,\n interval_end,\n ad_id,\n zone_id,\n required_impressions,\n requested_impressions,\n priority,\n priority_factor,\n priority_factor_limited,\n past_zone_traffic_fraction,\n created,\n created_by,\n expired,\n expired_by\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['data_summary_ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']}\n AND expired IS NOT NULL"; $rc = $oDbh->query($query); $aRow = $rc->fetchRow(); $currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oOldDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oOldDate); $this->assertEqual($aRow['operation_interval'], $conf['maintenance']['operationInterval']); $this->assertEqual($aRow['operation_interval_id'], $currentOperationIntervalID); $this->assertEqual($aRow['interval_start'], $aDates['start']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['interval_end'], $aDates['end']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['ad_id'], $this->aIds['ad']); $this->assertEqual($aRow['zone_id'], $this->aIds['ad']); $this->assertEqual($aRow['required_impressions'], 1000); $this->assertEqual($aRow['requested_impressions'], 1000); $this->assertEqual($aRow['priority'], 0.45); $this->assertNull($aRow['priority_factor']); $this->assertFalse($aRow['priority_factor_limited']); $this->assertNull($aRow['past_zone_traffic_fraction']); $this->assertEqual($aRow['created'], $oOldDate->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['created_by'], 0); $this->assertEqual($aRow['expired'], $oDate->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['expired_by'], 0); $query = "\n SELECT\n operation_interval,\n operation_interval_id,\n interval_start,\n interval_end,\n ad_id,\n zone_id,\n required_impressions,\n requested_impressions,\n priority,\n priority_factor,\n priority_factor_limited,\n past_zone_traffic_fraction,\n created,\n created_by,\n expired,\n expired_by\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['data_summary_ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']}\n AND expired IS NULL"; $rc = $oDbh->query($query); $aRow = $rc->fetchRow(); $currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $this->assertEqual($aRow['operation_interval'], $conf['maintenance']['operationInterval']); $this->assertEqual($aRow['operation_interval_id'], $currentOperationIntervalID); $this->assertEqual($aRow['interval_start'], $aDates['start']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['interval_end'], $aDates['end']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['ad_id'], $this->aIds['ad']); $this->assertEqual($aRow['zone_id'], $this->aIds['ad']); $this->assertEqual($aRow['required_impressions'], 2000); $this->assertEqual($aRow['requested_impressions'], 2000); $this->assertEqual($aRow['priority'], 0.9); $this->assertEqual($aRow['priority_factor'], 0.1); $this->assertFalse($aRow['priority_factor_limited']); $this->assertEqual($aRow['past_zone_traffic_fraction'], 0.99); $this->assertEqual($aRow['created'], $oDate->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['created_by'], 0); $this->assertNull($aRow['expired']); $this->assertNull($aRow['expired_by']); $query = "\n SELECT\n operation_interval,\n operation_interval_id,\n interval_start,\n interval_end,\n ad_id,\n zone_id,\n required_impressions,\n requested_impressions,\n priority,\n priority_factor,\n priority_factor_limited,\n past_zone_traffic_fraction,\n created,\n created_by,\n expired,\n expired_by\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['data_summary_ad_zone_assoc'], true) . "\n WHERE\n ad_id = " . ($this->aIds['ad'] + 1); $rc = $oDbh->query($query); $aRow = $rc->fetchRow(); $currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate); $aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate); $this->assertEqual($aRow['operation_interval'], $conf['maintenance']['operationInterval']); $this->assertEqual($aRow['operation_interval_id'], $currentOperationIntervalID); $this->assertEqual($aRow['interval_start'], $aDates['start']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['interval_end'], $aDates['end']->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['ad_id'], $this->aIds['ad'] + 1); $this->assertEqual($aRow['zone_id'], $this->aIds['ad'] + 1); $this->assertEqual($aRow['required_impressions'], 500); $this->assertEqual($aRow['requested_impressions'], 500); $this->assertEqual($aRow['priority'], 0.1); $this->assertEqual($aRow['priority_factor'], 0.2); $this->assertTrue($aRow['priority_factor_limited']); $this->assertEqual($aRow['past_zone_traffic_fraction'], 0.45); $this->assertEqual($aRow['created'], $oDate->format('%Y-%m-%d %H:%M:%S')); $this->assertEqual($aRow['created_by'], 0); $this->assertNull($aRow['expired']); $this->assertNull($aRow['expired_by']); // Test 4 $aData = array(); for ($i = 1; $i < 5000; $i++) { $aData[$i] = array('ads' => array(array('ad_id' => $i, 'zone_id' => $i, 'required_impressions' => 2000, 'requested_impressions' => 2000, 'priority' => 0.9, 'priority_factor' => 0.1, 'priority_factor_limited' => false, 'past_zone_traffic_fraction' => 0.99))); } $oOldDate = new Date(); $oOldDate->copy($oDate); $oDate = new Date(); $oServiceLocator->register('now', $oDate); $result = $oMaxDalMaintenance->updatePriorities($aData); TestEnv::restoreEnv('dropTmpTables'); }