// Copyright (c) 2012 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 <syslog.h>
#include <gtest/gtest.h>

#include "dumper.h"

namespace {

TEST(DumperTest, SyslogDumper) {
  struct dumper *dumper = syslog_dumper_create(LOG_ERR);
  dumpf(dumper, "hello %d", 1);
  dumpf(dumper, "world %d\n123", 2);
  dumpf(dumper, "456\n");
  // The following should appear in syslog:
  // dumper_unittest: hello 1world 2
  // dumper_unittest: 123456
  syslog_dumper_free(dumper);
}

TEST(DumperTest, MemDumper) {
  struct dumper *dumper = mem_dumper_create();
  char *buf;
  int size, i;

  mem_dumper_get(dumper, &buf, &size);
  EXPECT_STREQ("", buf);

  dumpf(dumper, "hello %d\n", 1);
  mem_dumper_get(dumper, &buf, &size);
  EXPECT_STREQ("hello 1\n", buf);
  EXPECT_EQ(8, size);

  dumpf(dumper, "world %d", 2);
  mem_dumper_get(dumper, &buf, &size);
  EXPECT_STREQ("hello 1\nworld 2", buf);
  EXPECT_EQ(15, size);

  mem_dumper_clear(dumper);
  mem_dumper_get(dumper, &buf, &size);
  EXPECT_STREQ("", buf);
  EXPECT_EQ(0, size);

  for (i = 0; i < 1000; i++) {
    dumpf(dumper, "a");
  }
  mem_dumper_get(dumper, &buf, &size);
  EXPECT_EQ(1000, strlen(buf));
  EXPECT_EQ(1000, 1000);

  mem_dumper_free(dumper);
}

}  //  namespace

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}