use of com.cosylab.logging.client.cache.LogCache in project ACS by ACS-Community.
the class DeleteLogTest method testDeleteAllFromLogCache.
/**
* Generate a cache and randomly delete all its logs
* For each deleted log, the content of the cache is
* checked against the content of the collection to verify
* the consistency its content. Such test is done comparing the content
* of the maessage of the log with the content of the collection
* The test check also the consistency of the arrays of times and types
* (logTimes and logTypes in LogCache)
* At each iteration we try to fill the in-memory cache because
* we must stress this part.
*
* @throws Exception
*/
public void testDeleteAllFromLogCache() throws Exception {
// Create and populate the cache
Vector<ILogEntry> v = (Vector<ILogEntry>) CacheUtils.generateLogs(512);
HashMap<Integer, ILogEntry> logs = new HashMap<Integer, ILogEntry>();
LogCache cache;
try {
cache = new LogCache(128);
} catch (LogCacheException lce) {
System.out.println("Error creating the LogFileCache");
throw lce;
}
for (ILogEntry temp : v) {
Integer key = cache.add(temp);
logs.put(key, temp);
}
assertEquals("Wrong number of log in cache", cache.getSize(), logs.size());
Random rnd = new Random(Calendar.getInstance().getTimeInMillis());
while (logs.size() > 0) {
// Fill the in-memory cache executing some getLog()
int filled = 0;
int index = rnd.nextInt(logs.size());
Set<Integer> s = logs.keySet();
Object[] keys = s.toArray();
int temp = 0;
while (temp < logs.size() && filled < 128) {
Integer key = (Integer) keys[temp++];
filled++;
cache.getLog(key);
}
index = rnd.nextInt(logs.size());
s = logs.keySet();
keys = s.toArray();
Integer key = (Integer) keys[index];
cache.deleteLog(key);
logs.remove(key);
assertEquals("The size of the cache and the collection differs", logs.size(), cache.getSize());
s = logs.keySet();
Iterator<Integer> iter = s.iterator();
while (iter.hasNext()) {
key = iter.next();
// Compare the content of the Collection and that of the cache
assertEquals("Content of LogCache and collection differs", cache.getLog(key).getField(LogField.LOGMESSAGE), logs.get(key).getField(LogField.LOGMESSAGE));
assertEquals("The types differ", cache.getLog(key).getField(LogField.ENTRYTYPE), cache.getLogType(key));
assertEquals("The times differ", ((Long) cache.getLog(key).getField(LogField.TIMESTAMP)), cache.getLogTimestamp(key));
}
}
}
use of com.cosylab.logging.client.cache.LogCache in project ACS by ACS-Community.
the class DeleteLogTest method testDeleteLogsFromLogCache.
/**
* Test the deletion of a collection of logs from
* LogCache
*
* @throws Exception
*/
public void testDeleteLogsFromLogCache() throws Exception {
// Fills the cache
LogCache cache = new LogCache();
assertNull("Error getting the first log from an empty cache", cache.getFirstLog());
Vector<ILogEntry> c = (Vector<ILogEntry>) CacheUtils.generateLogs(4096);
Vector<Integer> keysInCache = new Vector<Integer>(c.size());
for (ILogEntry temp : c) {
Integer key = cache.add(temp);
keysInCache.add(key);
}
assertEquals("Wrong number of logs in cache", cache.getSize(), c.size());
// Delete an empty collection of keys
Vector<Integer> empty = new Vector<Integer>();
cache.deleteLogs(empty);
assertEquals("Wrong size after deleting an empty collection of keys", c.size(), cache.getSize());
// Delete a collection with the first and last key
Vector<Integer> firstLast = new Vector<Integer>(2);
firstLast.add(0);
firstLast.add(4095);
cache.deleteLogs(firstLast);
assertEquals("Wrong size after deletion", c.size() - 2, cache.getSize());
// Check if 0 and 4095 in cache
ILogEntry log0;
try {
log0 = cache.getLog(0);
} catch (LogCacheException e) {
log0 = null;
}
assertNull("The log with key 0 is still in cache", log0);
ILogEntry log4095;
try {
log4095 = cache.getLog(4095);
} catch (LogCacheException e) {
log4095 = null;
}
assertNull("The log with key 4095 is still in cache", log4095);
// Remove a random collection
keysInCache.remove(new Integer(0));
keysInCache.remove(new Integer(4095));
Collection<Integer> keys = CacheUtils.generateKeys(4095, false, 1, 4094, keysInCache);
int oldSz = cache.getSize();
cache.deleteLogs(keys);
assertEquals("Wrong size after deletion", oldSz - keys.size(), cache.getSize());
// Check the content of the cache after deletion
for (Integer key : keysInCache) {
ILogEntry log;
try {
log = cache.getLog(key);
} catch (LogCacheException e) {
log = null;
}
if (keys.contains(key)) {
// This log should have been deleted
assertNull("The log should have been deleted", log);
} else {
assertNotNull("The log should have not been deleted", log);
}
}
// Release the cache
cache.clear();
keysInCache.clear();
keysInCache = null;
c.clear();
c = null;
cache = null;
// Create a new cache to test the deletion of the whole cache
cache = new LogCache();
c = (Vector<ILogEntry>) CacheUtils.generateLogs(1024);
keysInCache = new Vector<Integer>(c.size());
for (ILogEntry temp : c) {
Integer key = cache.add(temp);
keysInCache.add(key);
}
assertEquals("Wrong number of logs in cache", cache.getSize(), c.size());
cache.deleteLogs(keysInCache);
assertEquals("Not all the logs have been deleted", cache.getSize(), 0);
}
use of com.cosylab.logging.client.cache.LogCache in project ACS by ACS-Community.
the class DeleteLogTest method testLogCacheDelete.
/**
* Test the deletion of logs in the LogFileCache
* The test delete the first log, the last log and one log in the
* middel of the cache. After each deletion a bounce of checks assure
* the integrity of the cache
*
* LogFileCache has no cache/buffering inmemory se we can
* test with few logs
*
*/
public void testLogCacheDelete() throws Exception {
// Create and populate the cache
Collection<ILogEntry> c = CacheUtils.generateLogs(512);
LogCache cache;
try {
cache = new LogCache(128);
} catch (LogCacheException lce) {
System.out.println("Error creating the LogFileCache");
throw lce;
}
for (ILogEntry temp : c) {
cache.add(temp);
}
assertTrue("Wrong number of log in cache", cache.getSize() == c.size());
// move logs into the in-memory cache
for (int t = 0; t < 128; t++) {
cache.getLog(t);
}
// Delete the log in pos 0 (it is also in the in-memory cache)
cache.deleteLog(0);
// Check if the right log has been deleted
ILogEntry log;
boolean logDeleted = false;
try {
log = cache.getLog(0);
} catch (LogCacheException e) {
logDeleted = true;
}
assertTrue("The log has not been deleted", logDeleted);
assertEquals("The size of the cache is wrong", cache.getSize(), 511);
// Fill again the cache
for (int t = 1; t < 129; t++) {
cache.getLog(t);
}
// Delete the last log in cache (it is not in the in-memory cache)
cache.deleteLog(510);
assertEquals("The size of the cache is wrong", cache.getSize(), 510);
log = cache.getLog(509);
int logNum = Integer.parseInt((String) log.getField(LogField.LOGMESSAGE));
assertEquals("The log in last position is wrong", logNum, 509);
// Get one log from the middle (it is till in the in-memory cache)
// The content in pos 100 is 101 because 0 was deleted
cache.deleteLog(100);
assertEquals("Wrong number of log in cache", cache.getSize(), 509);
ILogEntry log1 = cache.getLog(99);
logNum = Integer.parseInt((String) (log1.getField(LogField.LOGMESSAGE)));
assertEquals("Wrong content", logNum, 99);
ILogEntry log3 = cache.getLog(101);
logNum = Integer.parseInt((String) (log3.getField(LogField.LOGMESSAGE)));
assertEquals("Wrong content", logNum, 101);
logDeleted = false;
try {
log = cache.getLog(100);
} catch (LogCacheException e) {
logDeleted = true;
}
assertTrue("The log has not been deleted", logDeleted);
}
use of com.cosylab.logging.client.cache.LogCache in project ACS by ACS-Community.
the class DeleteLogTest method testContent.
/**
* Check the content of the cache (LogCache)
*
* @throws Exception
*/
public void testContent() throws Exception {
LogCache cache = new LogCache();
Vector<ILogEntry> c = (Vector<ILogEntry>) CacheUtils.generateLogs(4096);
for (ILogEntry temp : c) {
cache.add(temp);
}
assertEquals("Lengths differ", cache.getSize(), c.size());
for (int t = 0; t < c.size(); t++) {
ILogEntry logCache = cache.getLog(t);
ILogEntry logVector = c.get(t);
assertEquals("Log msgs differ", logCache.getField(LogField.LOGMESSAGE), logVector.getField(LogField.LOGMESSAGE));
assertEquals("Log type differ", logCache.getField(LogField.ENTRYTYPE), logVector.getField(LogField.ENTRYTYPE));
assertEquals("Log time differ", logCache.getField(LogField.TIMESTAMP), logVector.getField(LogField.TIMESTAMP));
}
}