// 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 "cryptohome/mount_stack.h"

#include <base/files/file_path.h>
#include <gtest/gtest.h>

using base::FilePath;

namespace cryptohome {

TEST(MountStackTest, Correctness) {
  const base::FilePath kSrc1("/foo_src");
  const base::FilePath kDest1("/foo_dest");
  const base::FilePath kSrc2("/bar_src");
  const base::FilePath kDest2("/bar_dest");

  MountStack stack;
  stack.Push(kSrc1, kDest1);
  stack.Push(kSrc2, kDest2);

  EXPECT_TRUE(stack.ContainsDest(kDest1));
  EXPECT_TRUE(stack.ContainsDest(kDest2));
  EXPECT_FALSE(stack.ContainsDest(kSrc1));
  EXPECT_FALSE(stack.ContainsDest(base::FilePath("/bogus")));

  base::FilePath src_result, dest_result;
  EXPECT_TRUE(stack.Pop(&src_result, &dest_result));
  EXPECT_EQ(kSrc2, src_result);
  EXPECT_EQ(kDest2, dest_result);

  EXPECT_TRUE(stack.Pop(&src_result, &dest_result));
  EXPECT_EQ(kSrc1, src_result);
  EXPECT_EQ(kDest1, dest_result);

  EXPECT_FALSE(stack.Pop(&src_result, &dest_result));
}

}  // namespace cryptohome
