1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "sync/internal_api/public/attachments/fake_attachment_uploader.h"
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/bind.h"
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/ref_counted.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/ref_counted_memory.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/message_loop/message_loop.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/api/attachments/attachment.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace syncer {
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace {
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kAttachmentData[] = "some data";
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class FakeAttachmentUploaderTest : public testing::Test {
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) protected:
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetUp() {
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    upload_callback_count = 0;
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    upload_callback = base::Bind(&FakeAttachmentUploaderTest::Increment,
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 base::Unretained(this),
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 &upload_callback_count);
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::MessageLoop message_loop;
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  FakeAttachmentUploader uploader;
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int upload_callback_count;
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AttachmentUploader::UploadCallback upload_callback;
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private:
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void Increment(int* success_count,
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                 const AttachmentUploader::UploadResult& result,
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                 const AttachmentId& ignored) {
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (result == AttachmentUploader::UPLOAD_SUCCESS) {
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ++(*success_count);
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    }
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)};
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Call upload attachment several times, see that the supplied callback is
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// invoked the same number of times with a result of SUCCESS.
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(FakeAttachmentUploaderTest, UploadAttachment) {
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  some_data->data() = kAttachmentData;
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  Attachment attachment1 = Attachment::Create(some_data);
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  Attachment attachment2 = Attachment::Create(some_data);
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  Attachment attachment3 = Attachment::Create(some_data);
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  uploader.UploadAttachment(attachment1, upload_callback);
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  uploader.UploadAttachment(attachment2, upload_callback);
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  uploader.UploadAttachment(attachment3, upload_callback);
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  message_loop.RunUntilIdle();
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(upload_callback_count, 3);
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace syncer
61