190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/touch_operation.h"
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/files/file_path.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive.pb.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_errors.h"
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/operation_test_base.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/resource_metadata.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/test_utils.h"
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace drive {
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace file_system {
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)typedef OperationTestBase TouchOperationTest;
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(TouchOperationTest, TouchFile) {
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TouchOperation operation(blocking_task_runner(),
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                           delegate(),
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                           metadata());
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const base::FilePath kTestPath(FILE_PATH_LITERAL("drive/root/File 1.txt"));
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const base::Time::Exploded kLastAccessTime = {
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    2012, 7, 0, 19, 15, 59, 13, 123
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  };
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const base::Time::Exploded kLastModifiedTime = {
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    2013, 7, 0, 19, 15, 59, 13, 123
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  };
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FileError error = FILE_ERROR_FAILED;
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  operation.TouchFile(
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      kTestPath,
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Time::FromUTCExploded(kLastAccessTime),
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Time::FromUTCExploded(kLastModifiedTime),
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      google_apis::test_util::CreateCopyResultCallback(&error));
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  content::RunAllBlockingPoolTasksUntilIdle();
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(FILE_ERROR_OK, error);
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ResourceEntry entry;
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kTestPath, &entry));
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(base::Time::FromUTCExploded(kLastAccessTime),
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            base::Time::FromInternalValue(entry.file_info().last_accessed()));
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(base::Time::FromUTCExploded(kLastModifiedTime),
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            base::Time::FromInternalValue(entry.file_info().last_modified()));
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ(ResourceEntry::DIRTY, entry.metadata_edit_state());
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(1U, delegate()->get_changed_files().size());
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(delegate()->get_changed_files().count(kTestPath));
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(1U, delegate()->updated_local_ids().size());
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(delegate()->updated_local_ids().count(entry.local_id()));
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace file_system
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace drive
61