// Verify that views_test_data_views_data() has only been called once after
// calling clear().
$this->startCount();
$this->viewsData->get();
// Test views data has been invoked.
$this->assertCountIncrement();
// Clear the storage/cache.
$this->viewsData->clear();
// Get the data again.
$this->viewsData->get();
$this->viewsData->get($table_name);
$this->viewsData->get($random_table_name);
// Verify that view_test_data_views_data() has run once.
$this->assertCountIncrement();
// Get the data again.
$this->viewsData->get();
$this->viewsData->get($table_name);
$this->viewsData->get($random_table_name);
// Verify that view_test_data_views_data() has not run again.
$this->assertCountIncrement(FALSE);
// Clear the views data, and test all table data.
$this->viewsData->clear();
$this->startCount();
$data=$this->viewsData->get();
$this->assertEqual($data,$expected_data,'Make sure fetching all views data by works as expected.');
// Views data should be invoked once.
$this->assertCountIncrement();
// Calling get() again, the count for this table should stay the same.
$data=$this->viewsData->get();
$this->assertEqual($data,$expected_data,'Make sure fetching all cached views data works as expected.');
$this->assertCountIncrement(FALSE);
// Clear the views data, and test data for a specific table.
$this->viewsData->clear();
$this->startCount();
$data=$this->viewsData->get($table_name);
$this->assertEqual($data,$expected_data[$table_name],'Make sure fetching views data by table works as expected.');
// Views data should be invoked once.
$this->assertCountIncrement();
// Calling get() again, the count for this table should stay the same.
$data=$this->viewsData->get($table_name);
$this->assertEqual($data,$expected_data[$table_name],'Make sure fetching cached views data by table works as expected.');
$this->assertCountIncrement(FALSE);
// Test that this data is present if all views data is returned.
$data=$this->viewsData->get();
$this->assertTrue(isset($data[$table_name]),'Make sure the views_test_data info appears in the total views data.');
$this->assertEqual($data[$table_name],$expected_data[$table_name],'Make sure the views_test_data has the expected values.');
// Clear the views data, and test data for an invalid table.
$this->viewsData->clear();
$this->startCount();
// All views data should be requested on the first try.
$data=$this->viewsData->get($random_table_name);
$this->assertEqual($data,array(),'Make sure fetching views data for an invalid table returns an empty array.');
$this->assertCountIncrement();
// Test no data is rebuilt when requesting an invalid table again.
$data=$this->viewsData->get($random_table_name);
$this->assertEqual($data,array(),'Make sure fetching views data for an invalid table returns an empty array.');
$this->assertCountIncrement(FALSE);
}
/**
* Ensures that cache entries are only set and get when necessary.
*/
publicfunctiontestCacheRequests(){
// Request the same table 5 times. The caches are empty at this point, so
// what will happen is that it will first check for a cache entry for the
// given table, get a cache miss, then try the cache entry for all tables,
// which does not exist yet either. As a result, it rebuilds the information
// and writes a cache entry for all tables and the requested table.
$table_name='views_test_data';
for($i=0;$i<5;$i++){
$this->viewsData->get($table_name);
}
// Assert cache set and get calls.
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:views_test_data:en'),1,'Requested the cache for the table-specific cache entry.');
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:en'),1,'Requested the cache for all tables.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:views_test_data:en'),1,'Wrote the cache for the requested once.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:en'),1,'Wrote the cache for the all tables once.');
// Re-initialize the views data cache to simulate a new request and repeat.
// We have a warm cache now, so this will only request the tables-specific
// cache entry and return that.
$this->initViewsData();
for($i=0;$i<5;$i++){
$this->viewsData->get($table_name);
}
// Assert cache set and get calls.
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:views_test_data:en'),1,'Requested the cache for the table-specific cache entry.');
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:en'),0,'Did not request to load the cache entry for all tables.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:views_test_data:en'),0,'Did not write the cache for the requested table.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:en'),0,'Did not write the cache for all tables.');
// Re-initialize the views data cache to simulate a new request and request
// a different table. This will fail to get a table specific cache entry,
// load the cache entry for all tables and save a cache entry for this table
// but not all.
$this->initViewsData();
$another_table_name='views';
for($i=0;$i<5;$i++){
$this->viewsData->get($another_table_name);
}
// Assert cache set and get calls.
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:views:en'),1,'Requested the cache for the table-specific cache entry.');
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:en'),1,'Requested the cache for all tables.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:views:en'),1,'Wrote the cache for the requested once.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:en'),0,'Did not write the cache for all tables.');
// Re-initialize the views data cache to simulate a new request and request
// a non-existing table. This will result in the same cache requests as we
// explicitly write an empty cache entry for non-existing tables to avoid
// unecessary requests in those situations. We do have to load the cache
// entry for all tables to check if the table does exist or not.
$this->initViewsData();
$non_existing_table=$this->randomName();
for($i=0;$i<5;$i++){
$this->viewsData->get($non_existing_table);
}
// Assert cache set and get calls.
$this->assertEqual($this->memoryCounterBackend->getCounter('get',"views_data:$non_existing_table:en"),1,'Requested the cache for the table-specific cache entry.');
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:en'),1,'Requested the cache for all tables.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set',"views_data:$non_existing_table:en"),1,'Wrote the cache for the requested once.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:en'),0,'Did not write the cache for all tables.');
// Re-initialize the views data cache to simulate a new request and request
// the same non-existing table. This will load the table-specific cache
// entry and return the stored empty array for that.
$this->initViewsData();
for($i=0;$i<5;$i++){
$this->viewsData->get($non_existing_table);
}
// Assert cache set and get calls.
$this->assertEqual($this->memoryCounterBackend->getCounter('get',"views_data:$non_existing_table:en"),1,'Requested the cache for the table-specific cache entry.');
$this->assertEqual($this->memoryCounterBackend->getCounter('get','views_data:en'),0,'Did not request to load the cache entry for all tables.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set',"views_data:$non_existing_table:en"),0,'Did not write the cache for the requested table.');
$this->assertEqual($this->memoryCounterBackend->getCounter('set','views_data:en'),0,'Did not write the cache for all tables.');
// Re-initialize the views data cache and repeat with no specified table.
// This should only load the cache entry for all tables.
$this->initViewsData();
for($i=0;$i<5;$i++){
$this->viewsData->get();
}
// This only requested the full information. No other cache requests should