1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "sync/internal_api/public/attachments/fake_attachment_uploader.h"
6
7#include "base/bind.h"
8#include "base/memory/ref_counted.h"
9#include "base/memory/ref_counted_memory.h"
10#include "base/message_loop/message_loop.h"
11#include "sync/api/attachments/attachment.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace syncer {
15
16namespace {
17
18const char kAttachmentData[] = "some data";
19
20}  // namespace
21
22class FakeAttachmentUploaderTest : public testing::Test {
23 protected:
24  virtual void SetUp() {
25    upload_callback_count = 0;
26    upload_callback = base::Bind(&FakeAttachmentUploaderTest::Increment,
27                                 base::Unretained(this),
28                                 &upload_callback_count);
29  }
30  base::MessageLoop message_loop;
31  FakeAttachmentUploader uploader;
32  int upload_callback_count;
33  AttachmentUploader::UploadCallback upload_callback;
34
35 private:
36  void Increment(int* success_count,
37                 const AttachmentUploader::UploadResult& result,
38                 const AttachmentId& ignored) {
39    if (result == AttachmentUploader::UPLOAD_SUCCESS) {
40      ++(*success_count);
41    }
42  }
43};
44
45// Call upload attachment several times, see that the supplied callback is
46// invoked the same number of times with a result of SUCCESS.
47TEST_F(FakeAttachmentUploaderTest, UploadAttachment) {
48  scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
49  some_data->data() = kAttachmentData;
50  Attachment attachment1 = Attachment::Create(some_data);
51  Attachment attachment2 = Attachment::Create(some_data);
52  Attachment attachment3 = Attachment::Create(some_data);
53  uploader.UploadAttachment(attachment1, upload_callback);
54  uploader.UploadAttachment(attachment2, upload_callback);
55  uploader.UploadAttachment(attachment3, upload_callback);
56  message_loop.RunUntilIdle();
57  EXPECT_EQ(upload_callback_count, 3);
58}
59
60}  // namespace syncer
61