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}