18a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin// 28a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin// Copyright 2011 The Android Open Source Project 38a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin// 48a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include <utils/String8.h> 58a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include <iostream> 68a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include <errno.h> 78a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 88a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "CrunchCache.h" 98a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "FileFinder.h" 108a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "MockFileFinder.h" 118a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "CacheUpdater.h" 128a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "MockCacheUpdater.h" 138a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 148a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinusing namespace android; 158a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinusing std::cout; 168a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinusing std::endl; 178a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 188a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinvoid expectEqual(int got, int expected, const char* desc) { 198a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << "Checking " << desc << ": "; 208a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << "Got " << got << ", expected " << expected << "..."; 218a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << ( (got == expected) ? "PASSED" : "FAILED") << endl; 228a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin errno += ((got == expected) ? 0 : 1); 238a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin} 248a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 258a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinint main() { 268a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 278a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin errno = 0; 288a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 298a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin String8 source("res"); 308a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin String8 dest("res2"); 318a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 328a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // Create data for MockFileFinder to feed to the cache 338a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin KeyedVector<String8, time_t> sourceData; 348a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // This shouldn't be updated 358a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin sourceData.add(String8("res/drawable/hello.png"),3); 368a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // This should be updated 378a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin sourceData.add(String8("res/drawable/world.png"),5); 388a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // This should cause make directory to be called 398a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin sourceData.add(String8("res/drawable-cool/hello.png"),3); 408a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 418a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin KeyedVector<String8, time_t> destData; 428a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin destData.add(String8("res2/drawable/hello.png"),3); 438a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin destData.add(String8("res2/drawable/world.png"),3); 448a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // this should call delete 458a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin destData.add(String8("res2/drawable/dead.png"),3); 468a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 478a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // Package up data and create mock file finder 488a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin KeyedVector<String8, KeyedVector<String8,time_t> > data; 498a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin data.add(source,sourceData); 508a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin data.add(dest,destData); 518a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin FileFinder* ff = new MockFileFinder(data); 528a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin CrunchCache cc(source,dest,ff); 538a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 548a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin MockCacheUpdater* mcu = new MockCacheUpdater(); 558a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin CacheUpdater* cu(mcu); 568a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 578a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << "Running Crunch..."; 588a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin int result = cc.crunch(cu); 598a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << ((result > 0) ? "PASSED" : "FAILED") << endl; 608a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin errno += ((result > 0) ? 0 : 1); 618a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 628a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin const int EXPECTED_RESULT = 2; 638a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin expectEqual(result, EXPECTED_RESULT, "number of files touched"); 648a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 658a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << "Checking calls to deleteFile and processImage:" << endl; 668a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin const int EXPECTED_DELETES = 1; 678a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin const int EXPECTED_PROCESSED = 2; 688a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // Deletes 698a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin expectEqual(mcu->deleteCount, EXPECTED_DELETES, "deleteFile"); 708a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // processImage 718a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin expectEqual(mcu->processCount, EXPECTED_PROCESSED, "processImage"); 728a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 738a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin const int EXPECTED_OVERWRITES = 3; 748a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin result = cc.crunch(cu, true); 758a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin expectEqual(result, EXPECTED_OVERWRITES, "number of files touched with overwrite"); 768a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin \ 778a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 788a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin if (errno == 0) 798a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << "ALL TESTS PASSED!" << endl; 808a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin else 818a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin cout << errno << " TESTS FAILED" << endl; 828a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 838a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin delete ff; 848a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin delete cu; 858a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 868a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin // TESTS BELOW WILL GO AWAY SOON 878a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 888a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin String8 source2("ApiDemos/res"); 898a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin String8 dest2("ApiDemos/res2"); 908a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 918a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin FileFinder* sff = new SystemFileFinder(); 928a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin CacheUpdater* scu = new SystemCacheUpdater(); 938a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 948a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin CrunchCache scc(source2,dest2,sff); 958a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin 968a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin scc.crunch(scu); 978a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin}