// 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 "cros-disks/archive_manager.h"

#include <gtest/gtest.h>

#include "cros-disks/metrics.h"
#include "cros-disks/platform.h"

using std::string;
using std::vector;

namespace {

const char kMountRootDirectory[] = "/media/archive";

}  // namespace

namespace cros_disks {

class ArchiveManagerTest : public ::testing::Test {
 public:
  ArchiveManagerTest()
      : manager_(kMountRootDirectory, &platform_, &metrics_) {
  }

 protected:
  Metrics metrics_;
  Platform platform_;
  ArchiveManager manager_;
};

TEST_F(ArchiveManagerTest, CanMount) {
  EXPECT_FALSE(manager_.CanMount("/dev/sda1"));
  EXPECT_FALSE(manager_.CanMount("/devices/block/sda/sda1"));
  EXPECT_FALSE(manager_.CanMount("/sys/devices/block/sda/sda1"));
  EXPECT_FALSE(manager_.CanMount("/media/removable/disk1"));
  EXPECT_FALSE(manager_.CanMount("/media/removable/disk1/"));
  EXPECT_FALSE(manager_.CanMount("/media/removable/disk 1"));
  EXPECT_FALSE(manager_.CanMount("/media/archive/test.zip"));
  EXPECT_FALSE(manager_.CanMount("/media/archive/test.zip/"));
  EXPECT_FALSE(manager_.CanMount("/media/archive/test 1.zip"));
  EXPECT_TRUE(manager_.CanMount("/media/removable/disk1/test.zip"));
  EXPECT_TRUE(manager_.CanMount("/media/removable/disk1/test 1.zip"));
  EXPECT_TRUE(manager_.CanMount("/media/removable/disk1/dir1/test.zip"));
  EXPECT_TRUE(manager_.CanMount("/media/removable/test.zip/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/user/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/user/GCache/test1.zip"));
  EXPECT_TRUE(manager_.CanMount("/home/chronos"
                                "/u-0123456789abcdef0123456789abcdef01234567"
                                "/Downloads/test1.zip"));
  EXPECT_TRUE(manager_.CanMount("/home/chronos"
                                "/u-0123456789abcdef0123456789abcdef01234567"
                                "/GCache/test1.zip"));
  EXPECT_FALSE(manager_.CanMount(""));
  EXPECT_FALSE(manager_.CanMount("/tmp"));
  EXPECT_FALSE(manager_.CanMount("/media/removable"));
  EXPECT_FALSE(manager_.CanMount("/media/removable/"));
  EXPECT_FALSE(manager_.CanMount("/media/archive"));
  EXPECT_FALSE(manager_.CanMount("/media/archive/"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/user/Downloads"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/user/Downloads/"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/user/GCache"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/user/GCache/"));
  EXPECT_FALSE(manager_.CanMount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/Downloads"));
  EXPECT_FALSE(manager_.CanMount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/Downloads/"));
  EXPECT_FALSE(manager_.CanMount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/GCache"));
  EXPECT_FALSE(manager_.CanMount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/GCache/"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/user/test1.zip"));
  EXPECT_FALSE(manager_.CanMount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/GCache/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/foo/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/foo/GCache/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos/u-/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos"
                                 "/u-0123456789abcdef0123456789abcdef0123456"
                                 "/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanMount("/home/chronos"
                                 "/u-xyz3456789abcdef0123456789abcdef01234567"
                                 "/Downloads/test1.zip"));
}

TEST_F(ArchiveManagerTest, CanUnmount) {
  EXPECT_FALSE(manager_.CanUnmount("/dev/sda1"));
  EXPECT_FALSE(manager_.CanUnmount("/devices/block/sda/sda1"));
  EXPECT_FALSE(manager_.CanUnmount("/sys/devices/block/sda/sda1"));
  EXPECT_FALSE(manager_.CanUnmount("/media/removable/disk1"));
  EXPECT_FALSE(manager_.CanUnmount("/media/removable/disk1/"));
  EXPECT_FALSE(manager_.CanUnmount("/media/removable/disk 1"));
  EXPECT_TRUE(manager_.CanUnmount("/media/archive/test.zip"));
  EXPECT_TRUE(manager_.CanUnmount("/media/archive/test.zip/"));
  EXPECT_TRUE(manager_.CanUnmount("/media/archive/test 1.zip"));
  EXPECT_TRUE(manager_.CanUnmount("/media/removable/disk1/test.zip"));
  EXPECT_TRUE(manager_.CanUnmount("/media/removable/disk1/test 1.zip"));
  EXPECT_TRUE(manager_.CanUnmount("/media/removable/disk1/dir1/test.zip"));
  EXPECT_TRUE(manager_.CanUnmount("/media/removable/test.zip/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/user/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/user/GCache/test1.zip"));
  EXPECT_TRUE(manager_.CanUnmount("/home/chronos"
                                  "/u-0123456789abcdef0123456789abcdef01234567"
                                  "/Downloads/test1.zip"));
  EXPECT_TRUE(manager_.CanUnmount("/home/chronos"
                                  "/u-0123456789abcdef0123456789abcdef01234567"
                                  "/GCache/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount(""));
  EXPECT_FALSE(manager_.CanUnmount("/tmp"));
  EXPECT_FALSE(manager_.CanUnmount("/media/removable"));
  EXPECT_FALSE(manager_.CanUnmount("/media/removable/"));
  EXPECT_FALSE(manager_.CanUnmount("/media/archive"));
  EXPECT_FALSE(manager_.CanUnmount("/media/archive/"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/user/Downloads"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/user/Downloads/"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/user/GCache"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/user/GCache/"));
  EXPECT_FALSE(manager_.CanUnmount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/Downloads"));
  EXPECT_FALSE(manager_.CanUnmount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/Downloads/"));
  EXPECT_FALSE(manager_.CanUnmount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/GCache"));
  EXPECT_FALSE(manager_.CanUnmount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/GCache/"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/user/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount(
      "/home/chronos/u-0123456789abcdef0123456789abcdef01234567/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/GCache/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/foo/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/foo/GCache/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos/u-/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos"
                                   "/u-0123456789abcdef0123456789abcdef0123456"
                                   "/Downloads/test1.zip"));
  EXPECT_FALSE(manager_.CanUnmount("/home/chronos"
                                   "/u-xyz3456789abcdef0123456789abcdef01234567"
                                   "/Downloads/test1.zip"));
}

TEST_F(ArchiveManagerTest, DoMountFailedWithUnsupportedExtension) {
  string filesystem_type;
  string source_path = "/media/archive/test.zip/doc.zip";
  string mount_path = "/media/archive/doc.zip";
  vector<string> options;

  manager_.avfs_started_ = true;
  EXPECT_EQ(MOUNT_ERROR_UNSUPPORTED_ARCHIVE,
            manager_.DoMount(source_path, filesystem_type, options,
                             mount_path));
}

TEST_F(ArchiveManagerTest, SuggestMountPath) {
  string expected_mount_path = string(kMountRootDirectory) + "/doc.zip";
  EXPECT_EQ(expected_mount_path,
            manager_.SuggestMountPath("/home/chronos/user/Downloads/doc.zip"));
  EXPECT_EQ(expected_mount_path,
            manager_.SuggestMountPath("/media/archive/test.zip/doc.zip"));
}

TEST_F(ArchiveManagerTest, GetFileExtension) {
  EXPECT_EQ("", manager_.GetFileExtension(""));
  EXPECT_EQ("", manager_.GetFileExtension("test"));
  EXPECT_EQ("", manager_.GetFileExtension("/tmp/test"));
  EXPECT_EQ("zip", manager_.GetFileExtension(".zip"));
  EXPECT_EQ("zip", manager_.GetFileExtension(".Zip"));
  EXPECT_EQ("zip", manager_.GetFileExtension("test.zip"));
  EXPECT_EQ("zip", manager_.GetFileExtension("test.ZIP"));
  EXPECT_EQ("zip", manager_.GetFileExtension("/tmp/test.zip"));
  EXPECT_EQ("rar", manager_.GetFileExtension("/tmp/test.rar"));
  EXPECT_EQ("tar", manager_.GetFileExtension("/tmp/test.tar"));
  EXPECT_EQ("tar.gz", manager_.GetFileExtension("/tmp/test.tar.gz"));
  EXPECT_EQ("tgz", manager_.GetFileExtension("/tmp/test.tgz"));
  EXPECT_EQ("tar.bz2", manager_.GetFileExtension("/tmp/test.tar.bz2"));
  EXPECT_EQ("tbz", manager_.GetFileExtension("/tmp/test.tbz"));
  EXPECT_EQ("tbz2", manager_.GetFileExtension("/tmp/test.tbz2"));
}

TEST_F(ArchiveManagerTest, GetAVFSPath) {
  manager_.RegisterFileExtension("zip", "#uzip");

  EXPECT_EQ("/run/avfsroot/users/user/Downloads/a.zip#uzip",
            manager_.GetAVFSPath("/home/chronos/user/Downloads/a.zip", "zip"));
  EXPECT_EQ("/run/avfsroot/users/u-0123456789abcdef0123456789abcdef01234567"
            "/Downloads/a.zip#uzip",
            manager_.GetAVFSPath(
                "/home/chronos/u-0123456789abcdef0123456789abcdef01234567"
                "/Downloads/a.zip", "zip"));
  EXPECT_EQ("/run/avfsroot/media/archive/test.zip/doc.zip#uzip",
            manager_.GetAVFSPath("/media/archive/test.zip/doc.zip", "zip"));
  EXPECT_EQ("/run/avfsroot/media/removable/disk1/test.zip#uzip",
            manager_.GetAVFSPath("/media/removable/disk1/test.zip", "zip"));
  EXPECT_EQ("/run/avfsroot/media/removable/disk1/test.ZIP#uzip",
            manager_.GetAVFSPath("/media/removable/disk1/test.ZIP", "zip"));
}

TEST_F(ArchiveManagerTest, GetAVFSPathWithInvalidPaths) {
  manager_.RegisterFileExtension("zip", "#uzip");

  EXPECT_EQ("", manager_.GetAVFSPath("", "zip"));
  EXPECT_EQ("", manager_.GetAVFSPath("test.zip", "zip"));
  EXPECT_EQ("", manager_.GetAVFSPath("/tmp/test.zip", "zip"));
}

TEST_F(ArchiveManagerTest, GetAVFSPathWithUnsupportedExtensions) {
  EXPECT_EQ("", manager_.GetAVFSPath("/home/chronos/user/Downloads/a.zip", ""));
  EXPECT_EQ("",
            manager_.GetAVFSPath("/home/chronos/user/Downloads/a.zip", "zip"));
}

TEST_F(ArchiveManagerTest, GetAVFSPathWithNestedArchives) {
  manager_.RegisterFileExtension("zip", "#uzip");

  EXPECT_EQ("/run/avfsroot/media/archive/l2.zip/l1.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l2.zip/l1.zip", "zip"));

  // archive within an archive
  manager_.AddMountVirtualPath("/media/archive/l2.zip",
                               "/run/avfsroot/media/l2.zip#uzip");
  EXPECT_EQ("/run/avfsroot/media/l2.zip#uzip/l1.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l2.zip/l1.zip", "zip"));
  EXPECT_EQ("/run/avfsroot/media/l2.zip#uzip/t/l1.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l2.zip/t/l1.zip", "zip"));
  EXPECT_EQ("/run/avfsroot/media/l2.zip#uzip/t/doc/l1.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l2.zip/t/doc/l1.zip", "zip"));

  // archive within an archive within an archive
  manager_.AddMountVirtualPath(
      "/media/archive/l1.zip",
      "/run/avfsroot/media/l2.zip#uzip/l1.zip#uzip");
  EXPECT_EQ("/run/avfsroot/media/l2.zip#uzip/l1.zip#uzip/l0.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l1.zip/l0.zip", "zip"));
  EXPECT_EQ("/run/avfsroot/media/l2.zip#uzip/l1.zip#uzip/test/l0.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l1.zip/test/l0.zip", "zip"));
  manager_.RemoveMountVirtualPath("/media/archive/l1.zip");

  manager_.AddMountVirtualPath(
      "/media/archive/l1.zip",
      "/run/avfsroot/media/l2.zip#uzip/test/l1.zip#uzip");
  EXPECT_EQ("/run/avfsroot/media/l2.zip#uzip/test/l1.zip#uzip/l0.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l1.zip/l0.zip", "zip"));
  EXPECT_EQ(
      "/run/avfsroot/media/l2.zip#uzip/test/l1.zip#uzip/test/l0.zip#uzip",
      manager_.GetAVFSPath("/media/archive/l1.zip/test/l0.zip", "zip"));
  manager_.RemoveMountVirtualPath("/media/archive/l1.zip");

  manager_.RemoveMountVirtualPath("/media/archive/l2.zip");
  EXPECT_EQ("/run/avfsroot/media/archive/l2.zip/l1.zip#uzip",
            manager_.GetAVFSPath("/media/archive/l2.zip/l1.zip", "zip"));
}

}  // namespace cros_disks
