1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Copyright 2011 The Android Open Source Project 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/String8.h> 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <iostream> 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <errno.h> 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "CrunchCache.h" 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "FileFinder.h" 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "MockFileFinder.h" 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "CacheUpdater.h" 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "MockCacheUpdater.h" 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing namespace android; 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing std::cout; 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing std::endl; 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskivoid expectEqual(int got, int expected, const char* desc) { 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Checking " << desc << ": "; 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Got " << got << ", expected " << expected << "..."; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << ( (got == expected) ? "PASSED" : "FAILED") << endl; 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski errno += ((got == expected) ? 0 : 1); 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiint main() { 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski errno = 0; 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 source("res"); 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 dest("res2"); 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Create data for MockFileFinder to feed to the cache 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski KeyedVector<String8, time_t> sourceData; 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // This shouldn't be updated 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sourceData.add(String8("res/drawable/hello.png"),3); 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // This should be updated 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sourceData.add(String8("res/drawable/world.png"),5); 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // This should cause make directory to be called 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sourceData.add(String8("res/drawable-cool/hello.png"),3); 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski KeyedVector<String8, time_t> destData; 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski destData.add(String8("res2/drawable/hello.png"),3); 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski destData.add(String8("res2/drawable/world.png"),3); 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // this should call delete 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski destData.add(String8("res2/drawable/dead.png"),3); 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Package up data and create mock file finder 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski KeyedVector<String8, KeyedVector<String8,time_t> > data; 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski data.add(source,sourceData); 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski data.add(dest,destData); 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FileFinder* ff = new MockFileFinder(data); 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CrunchCache cc(source,dest,ff); 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MockCacheUpdater* mcu = new MockCacheUpdater(); 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CacheUpdater* cu(mcu); 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Running Crunch..."; 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int result = cc.crunch(cu); 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << ((result > 0) ? "PASSED" : "FAILED") << endl; 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski errno += ((result > 0) ? 0 : 1); 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int EXPECTED_RESULT = 2; 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski expectEqual(result, EXPECTED_RESULT, "number of files touched"); 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Checking calls to deleteFile and processImage:" << endl; 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int EXPECTED_DELETES = 1; 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int EXPECTED_PROCESSED = 2; 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Deletes 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski expectEqual(mcu->deleteCount, EXPECTED_DELETES, "deleteFile"); 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // processImage 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski expectEqual(mcu->processCount, EXPECTED_PROCESSED, "processImage"); 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int EXPECTED_OVERWRITES = 3; 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski result = cc.crunch(cu, true); 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski expectEqual(result, EXPECTED_OVERWRITES, "number of files touched with overwrite"); 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski \ 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (errno == 0) 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "ALL TESTS PASSED!" << endl; 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski else 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << errno << " TESTS FAILED" << endl; 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski delete ff; 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski delete cu; 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // TESTS BELOW WILL GO AWAY SOON 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 source2("ApiDemos/res"); 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 dest2("ApiDemos/res2"); 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FileFinder* sff = new SystemFileFinder(); 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CacheUpdater* scu = new SystemCacheUpdater(); 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CrunchCache scc(source2,dest2,sff); 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski scc.crunch(scu); 97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}