// Copyright 2018 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 "imageloader/dlc.h"

#include <memory>

#include <brillo/imageloader/manifest.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include "imageloader/mock_helper_process_proxy.h"
#include "imageloader/test_utilities.h"

namespace imageloader {

TEST(DlcTest, MountDlc) {
  base::FilePath metadata_path = GetTestDataPath("example_dlc");
  base::FilePath image_path = metadata_path.Append("dlc.img");
  base::FilePath manifest_path = metadata_path.Append("imageloader.json");
  base::FilePath table_path = metadata_path.Append("table");

  auto proxy = std::make_unique<MockHelperProcessProxy>();
  EXPECT_CALL(*proxy, SendMountCommand(testing::_, testing::_,
                                       brillo::imageloader::FileSystem::kExt4,
                                       testing::_))
      .Times(1);
  ON_CALL(*proxy,
          SendMountCommand(testing::_, testing::_, testing::_, testing::_))
      .WillByDefault(testing::Return(true));

  Dlc dlc("exampledlcid");
  EXPECT_TRUE(dlc.Mount(proxy.get(), image_path, manifest_path, table_path,
                        AOrB::kDlcA, base::FilePath()));
}

TEST(DlcTest, IsIdValid) {
  // alpha numerical IDs:
  EXPECT_TRUE(Dlc::IsIdValid("alpha"));
  EXPECT_TRUE(Dlc::IsIdValid("01234"));
  EXPECT_TRUE(Dlc::IsIdValid("alphanum01234"));
  EXPECT_TRUE(Dlc::IsIdValid("01234alphanumerical"));
  EXPECT_TRUE(Dlc::IsIdValid("dash-id0123"));
  EXPECT_TRUE(Dlc::IsIdValid("underscore_id_0123"));
  EXPECT_TRUE(Dlc::IsIdValid("0123-a_dash-id"));
  EXPECT_TRUE(Dlc::IsIdValid(u8"unicode_id"));
  // first char is illegal:
  EXPECT_FALSE(Dlc::IsIdValid("-non-alpha"));
  EXPECT_FALSE(Dlc::IsIdValid("_non-alpha"));
  EXPECT_FALSE(Dlc::IsIdValid(".non-alpha"));
  // non-alpha numerical IDs:
  EXPECT_FALSE(Dlc::IsIdValid("dot.id"));
  EXPECT_FALSE(Dlc::IsIdValid("../../../../evilid"));
  EXPECT_FALSE(Dlc::IsIdValid(u8"unicode_id_#"));
  // ID is too long.
  EXPECT_FALSE(Dlc::IsIdValid("id-is-too-looooooooong"));
}

}  // namespace imageloader
