Almost there...



git-svn-id: svn://chrome-svn/chromeos/trunk@24 06c00378-0e64-4dae-be16-12b19f9950a1
diff --git a/omaha_hash_calculator_unittest.cc b/omaha_hash_calculator_unittest.cc
new file mode 100644
index 0000000..0ee3b80
--- /dev/null
+++ b/omaha_hash_calculator_unittest.cc
@@ -0,0 +1,66 @@
+// Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <math.h>
+#include <unistd.h>
+#include <glib.h>
+#include <gtest/gtest.h>
+#include "update_engine/libcurl_http_fetcher.h"
+#include "update_engine/omaha_hash_calculator.h"
+
+namespace chromeos_update_engine {
+
+class OmahaHashCalculatorTest : public ::testing::Test { };
+
+TEST(OmahaHashCalculatorTest, SimpleTest) {
+  OmahaHashCalculator calc;
+  calc.Update("hi", 2);
+  calc.Finalize();
+  // Generated by running this on a linux shell:
+  // $ echo -n hi | openssl sha1 -binary | openssl base64
+  EXPECT_EQ("witfkXg0JglCjW9RssWvTAveakI=", calc.hash());
+}
+
+TEST(OmahaHashCalculatorTest, MultiUpdateTest) {
+  OmahaHashCalculator calc;
+  calc.Update("h", 1);
+  calc.Update("i", 1);
+  calc.Finalize();
+  // Generated by running this on a linux shell:
+  // $ echo -n hi | openssl sha1 -binary | openssl base64
+  EXPECT_EQ("witfkXg0JglCjW9RssWvTAveakI=", calc.hash());
+}
+
+TEST(OmahaHashCalculatorTest, BigTest) {
+  OmahaHashCalculator calc;
+
+  for (int i = 0; i < 1000000; i++) {
+    char buf[8];
+    ASSERT_EQ(0 == i ? 1 : static_cast<int>(floorf(logf(i) / logf(10))) + 1,
+              snprintf(buf, sizeof(buf), "%d", i)) << " i = " << i;
+    calc.Update(buf, strlen(buf));
+  }
+  calc.Finalize();
+
+  // Hash constant generated by running this on a linux shell:
+  // $ C=0
+  // $ while [ $C -lt 1000000 ]; do
+  //     echo -n $C
+  //     let C=C+1
+  //   done | openssl sha1 -binary | openssl base64
+  EXPECT_EQ("qdNsMeRqzoEUu5/ABi+MGRli87s=", calc.hash());
+}
+
+TEST(OmahaHashCalculatorTest, AbortTest) {
+  // Just make sure we don't crash and valgrind doesn't detect memory leaks
+  {
+    OmahaHashCalculator calc;
+  }
+  {
+    OmahaHashCalculator calc;
+    calc.Update("h", 1);
+  }
+}
+
+}  // namespace chromeos_update_engine