/core/externals/update-engine/Common/KSStatsCollectionTest.m

http://macfuse.googlecode.com/ · Objective C · 240 lines · 156 code · 45 blank · 39 comment · 21 complexity · a6b9efede9e110b16a50853e3dd00b4c MD5 · raw file

  1. // Copyright 2008 Google Inc.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #import <SenTestingKit/SenTestingKit.h>
  15. #import "KSStatsCollection.h"
  16. #import "KSUUID.h"
  17. @interface KSStatsCollectionTest : SenTestCase
  18. @end
  19. @implementation KSStatsCollectionTest
  20. - (void)testCreation {
  21. KSStatsCollection *stats = nil;
  22. stats = [[[KSStatsCollection alloc] init] autorelease];
  23. STAssertNil(stats, nil);
  24. stats = [KSStatsCollection statsCollectionWithPath:nil];
  25. STAssertNil(stats, nil);
  26. NSString *tempPath = @"/tmp/qwedzsrzstzw";
  27. stats = [KSStatsCollection statsCollectionWithPath:tempPath];
  28. STAssertNotNil(stats, nil);
  29. STAssertEqualObjects(tempPath, [stats path], nil);
  30. STAssertTrue([stats autoSynchronize], nil);
  31. STAssertTrue([[stats description] length] > 1, nil);
  32. [stats setAutoSynchronize:NO];
  33. STAssertFalse([stats autoSynchronize], nil);
  34. [[NSFileManager defaultManager] removeFileAtPath:tempPath handler:nil];
  35. }
  36. - (void)testIntegerStats {
  37. NSString *path = @"/dev/null";
  38. KSStatsCollection *stats = [KSStatsCollection statsCollectionWithPath:path
  39. autoSynchronize:NO];
  40. STAssertNotNil(stats, nil);
  41. STAssertTrue([stats count] == 0, nil);
  42. //
  43. // Test -setNumber:forStat
  44. //
  45. STAssertNil([stats numberForStat:@"test1"], nil);
  46. [stats setNumber:[NSNumber numberWithInt:3] forStat:@"test1"];
  47. STAssertNotNil([stats numberForStat:@"test1"], nil);
  48. STAssertEqualObjects([stats numberForStat:@"test1"], [NSNumber numberWithInt:3], nil);
  49. STAssertTrue([stats count] == 1, nil);
  50. //
  51. // Test -incrementStat:
  52. //
  53. STAssertNil([stats numberForStat:@"test2"], nil);
  54. [stats incrementStat:@"test2"];
  55. STAssertNotNil([stats numberForStat:@"test2"], nil);
  56. STAssertEqualObjects([stats numberForStat:@"test2"], [NSNumber numberWithInt:1], nil);
  57. STAssertTrue([stats count] == 2, nil);
  58. [stats incrementStat:@"test2"];
  59. [stats incrementStat:@"test2"];
  60. STAssertEqualObjects([stats numberForStat:@"test2"], [NSNumber numberWithInt:3], nil);
  61. STAssertTrue([stats count] == 2, nil);
  62. //
  63. // Test -decrementStat:
  64. //
  65. STAssertNil([stats numberForStat:@"test3"], nil);
  66. [stats decrementStat:@"test3"];
  67. STAssertNotNil([stats numberForStat:@"test3"], nil);
  68. STAssertEqualObjects([stats numberForStat:@"test3"], [NSNumber numberWithInt:-1], nil);
  69. STAssertTrue([stats count] == 3, nil);
  70. [stats decrementStat:@"test3"];
  71. [stats decrementStat:@"test3"];
  72. STAssertEqualObjects([stats numberForStat:@"test3"], [NSNumber numberWithInt:-3], nil);
  73. STAssertTrue([stats count] == 3, nil);
  74. //
  75. // Test -incrementStat:by:
  76. //
  77. STAssertNil([stats numberForStat:@"test4"], nil);
  78. [stats incrementStat:@"test4" by:1];
  79. STAssertNotNil([stats numberForStat:@"test4"], nil);
  80. STAssertEqualObjects([stats numberForStat:@"test4"], [NSNumber numberWithInt:1], nil);
  81. [stats incrementStat:@"test4" by:0];
  82. STAssertEqualObjects([stats numberForStat:@"test4"], [NSNumber numberWithInt:1], nil);
  83. [stats incrementStat:@"test4" by:2];
  84. STAssertEqualObjects([stats numberForStat:@"test4"], [NSNumber numberWithInt:3], nil);
  85. [stats incrementStat:@"test4" by:-2];
  86. STAssertEqualObjects([stats numberForStat:@"test4"], [NSNumber numberWithInt:1], nil);
  87. STAssertTrue([stats count] == 4, nil);
  88. //
  89. // Test -decrementStat:by:
  90. //
  91. STAssertNil([stats numberForStat:@"test5"], nil);
  92. [stats decrementStat:@"test5" by:1];
  93. STAssertNotNil([stats numberForStat:@"test5"], nil);
  94. STAssertEqualObjects([stats numberForStat:@"test5"], [NSNumber numberWithInt:-1], nil);
  95. [stats decrementStat:@"test5" by:2];
  96. STAssertEqualObjects([stats numberForStat:@"test5"], [NSNumber numberWithInt:-3], nil);
  97. [stats decrementStat:@"test5" by:-3];
  98. STAssertEqualObjects([stats numberForStat:@"test5"], [NSNumber numberWithInt:0], nil);
  99. STAssertTrue([stats count] == 5, nil);
  100. NSDictionary *expect = [NSDictionary dictionaryWithObjectsAndKeys:
  101. [NSNumber numberWithInt:3], @"test1",
  102. [NSNumber numberWithInt:3], @"test2",
  103. [NSNumber numberWithInt:-3], @"test3",
  104. [NSNumber numberWithInt:1], @"test4",
  105. [NSNumber numberWithInt:0], @"test5",
  106. nil];
  107. NSDictionary *dict = [stats statsDictionary];
  108. STAssertEqualObjects(dict, expect, nil);
  109. // Make sure our path is /dev/null and that synchronization fails (because we
  110. // can't atomically write to /dev/null).
  111. STAssertEqualObjects([stats path], @"/dev/null", nil);
  112. STAssertFalse([stats synchronize], nil);
  113. STAssertTrue([stats count] == 5, nil);
  114. [stats removeAllStats];
  115. STAssertTrue([stats count] == 0, nil);
  116. }
  117. - (void)testFloatStats {
  118. NSString *path = @"/dev/null";
  119. KSStatsCollection *stats = [KSStatsCollection statsCollectionWithPath:path
  120. autoSynchronize:NO];
  121. STAssertNotNil(stats, nil);
  122. STAssertTrue([stats count] == 0, nil);
  123. STAssertNil([stats numberForStat:@"test1"], nil);
  124. [stats setNumber:[NSNumber numberWithFloat:3.2] forStat:@"test1"];
  125. STAssertNotNil([stats numberForStat:@"test1"], nil);
  126. STAssertEqualObjects([stats numberForStat:@"test1"], [NSNumber numberWithFloat:3.2], nil);
  127. STAssertTrue([stats count] == 1, nil);
  128. NSDictionary *expect = [NSDictionary dictionaryWithObjectsAndKeys:
  129. [NSNumber numberWithFloat:3.2], @"test1",
  130. nil];
  131. NSDictionary *dict = [stats statsDictionary];
  132. STAssertEqualObjects(dict, expect, nil);
  133. // Make sure our path is /dev/null and that synchronization fails (because we
  134. // can't atomically write to /dev/null).
  135. STAssertEqualObjects([stats path], @"/dev/null", nil);
  136. STAssertFalse([stats synchronize], nil);
  137. STAssertTrue([stats count] == 1, nil);
  138. [stats removeAllStats];
  139. STAssertTrue([stats count] == 0, nil);
  140. }
  141. - (void)testSynchronizingStats {
  142. NSString *path = [NSString stringWithFormat:@"/tmp/%@.stats_unittest",
  143. [KSUUID uuidString]];
  144. BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
  145. STAssertFalse(exists, nil);
  146. KSStatsCollection *stats = [KSStatsCollection statsCollectionWithPath:path
  147. autoSynchronize:NO];
  148. STAssertNotNil(stats, nil);
  149. STAssertTrue([stats count] == 0, nil);
  150. [stats incrementStat:@"foo"];
  151. // After setting one stat, the file still should not exist because we set
  152. // auto syncing to NO.
  153. exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
  154. STAssertFalse(exists, nil);
  155. // Now we'll synchronize, and make sure the stats file gets created
  156. STAssertTrue([stats synchronize], nil);
  157. exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
  158. STAssertTrue(exists, nil);
  159. // Read the stats in from disk, and make sure |stats2| is the same as |stats|.
  160. KSStatsCollection *stats2 = [KSStatsCollection statsCollectionWithPath:path];
  161. STAssertEqualObjects([stats2 statsDictionary], [stats statsDictionary], nil);
  162. STAssertTrue([stats2 count] == 1, nil);
  163. [stats2 removeAllStats];
  164. STAssertTrue([stats2 count] == 0, nil);
  165. // Cleanup
  166. STAssertTrue([[NSFileManager defaultManager] removeFileAtPath:path handler:nil], nil);
  167. exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
  168. STAssertFalse(exists, nil);
  169. }
  170. - (void)testAutoSynchronizingStats {
  171. NSString *path = [NSString stringWithFormat:@"/tmp/%@.stats_unittest",
  172. [KSUUID uuidString]];
  173. BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
  174. STAssertFalse(exists, nil);
  175. KSStatsCollection *stats = [KSStatsCollection statsCollectionWithPath:path];
  176. STAssertNotNil(stats, nil);
  177. STAssertTrue([stats count] == 0, nil);
  178. [stats incrementStat:@"foo"];
  179. [stats incrementStat:@"bar"];
  180. [stats incrementStat:@"bar"];
  181. exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
  182. STAssertTrue(exists, nil);
  183. // Read the stats in from disk, and make sure |stats2| is the same as |stats|.
  184. KSStatsCollection *stats2 = [KSStatsCollection statsCollectionWithPath:path];
  185. STAssertTrue([stats count] == [stats2 count], nil);
  186. STAssertEqualObjects([stats2 statsDictionary], [stats statsDictionary], nil);
  187. STAssertTrue([stats2 count] == 2, nil);
  188. [stats2 removeAllStats];
  189. STAssertTrue([stats2 count] == 0, nil);
  190. // Cleanup
  191. STAssertTrue([[NSFileManager defaultManager] removeFileAtPath:path handler:nil], nil);
  192. exists = [[NSFileManager defaultManager] fileExistsAtPath:path];
  193. STAssertFalse(exists, nil);
  194. }
  195. @end