blob: c0da18283440c3d175d386e4505a6eb98decb9c6 [file] [log] [blame]
Ben Chane31d2aa2011-06-15 13:52:59 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Alex Deymo4527b9c2014-11-10 19:55:35 -08005#include "cros-disks/mount_options.h"
6
Ben Chane31d2aa2011-06-15 13:52:59 -07007#include <sys/mount.h>
8
9#include <string>
10#include <vector>
11
Sergei Datsenkof5553d12020-11-25 07:51:59 +110012#include <gmock/gmock.h>
Ben Chane31d2aa2011-06-15 13:52:59 -070013#include <gtest/gtest.h>
14
Ben Chane31d2aa2011-06-15 13:52:59 -070015namespace cros_disks {
16
Sergei Datsenkof5553d12020-11-25 07:51:59 +110017using testing::ElementsAre;
18
Sergei Datsenko3928f782020-12-31 09:14:04 +110019TEST(MountOptionsTest, IsReadOnlyMount) {
Sergei Datsenkof5553d12020-11-25 07:51:59 +110020 EXPECT_FALSE(IsReadOnlyMount({}));
21 EXPECT_FALSE(IsReadOnlyMount({"foo", "bar"}));
22 EXPECT_TRUE(IsReadOnlyMount({"ro"}));
23 EXPECT_FALSE(IsReadOnlyMount({"ro", "rw"}));
24 EXPECT_TRUE(IsReadOnlyMount({"foo", "ro", "bar", "rw", "ro", "baz"}));
25}
26
Sergei Datsenko3928f782020-12-31 09:14:04 +110027TEST(MountOptionsTest, GetParamValue) {
Sergei Datsenkof5553d12020-11-25 07:51:59 +110028 std::string value;
29 EXPECT_FALSE(GetParamValue({}, "foo", &value));
30 EXPECT_TRUE(GetParamValue({"a=b", "foo=bar", "baz", "x=y"}, "foo", &value));
31 EXPECT_EQ("bar", value);
32 EXPECT_FALSE(GetParamValue({"foo"}, "foo", &value));
33 EXPECT_TRUE(GetParamValue({"foo=bar", "foo=baz"}, "foo", &value));
34 EXPECT_EQ("baz", value);
35}
36
Sergei Datsenko3928f782020-12-31 09:14:04 +110037TEST(MountOptionsTest, SetParamValue) {
Sergei Datsenkof5553d12020-11-25 07:51:59 +110038 std::vector<std::string> params;
39 SetParamValue(&params, "foo", "bar");
40 SetParamValue(&params, "baz", "");
41 EXPECT_THAT(params, ElementsAre("foo=bar", "baz="));
42}
43
Sergei Datsenko7e7c7642021-01-08 19:15:34 +110044TEST(MountOptionsTest, HasExactParam) {
45 EXPECT_TRUE(HasExactParam({"abc", "foo", "bar=baz"}, "foo"));
46 EXPECT_FALSE(HasExactParam({"abc", "foo", "bar=baz"}, "bar"));
47}
48
49TEST(MountOptionsTest, RemoveParamsEqualTo) {
50 std::vector<std::string> params = {"abc", "foo", "bar=baz", "abc"};
51 EXPECT_EQ(0, RemoveParamsEqualTo(&params, "bar"));
52 EXPECT_THAT(params, ElementsAre("abc", "foo", "bar=baz", "abc"));
53 EXPECT_EQ(1, RemoveParamsEqualTo(&params, "foo"));
54 EXPECT_THAT(params, ElementsAre("abc", "bar=baz", "abc"));
55 EXPECT_EQ(2, RemoveParamsEqualTo(&params, "abc"));
56 EXPECT_THAT(params, ElementsAre("bar=baz"));
57}
58
59TEST(MountOptionsTest, RemoveParamsWithSameName) {
60 std::vector<std::string> params = {"abc", "foo=0", "bar=baz", "foo=1"};
61 EXPECT_EQ(0, RemoveParamsWithSameName(&params, "abc"));
62 EXPECT_THAT(params, ElementsAre("abc", "foo=0", "bar=baz", "foo=1"));
63 EXPECT_EQ(1, RemoveParamsWithSameName(&params, "bar"));
64 EXPECT_THAT(params, ElementsAre("abc", "foo=0", "foo=1"));
65 EXPECT_EQ(2, RemoveParamsWithSameName(&params, "foo"));
66 EXPECT_THAT(params, ElementsAre("abc"));
67}
68
Sergei Datsenko1bb0bdc2021-02-17 11:26:43 +110069TEST(MountOptionsTest, JoinParamsIntoOptions) {
70 std::string result;
71
72 EXPECT_TRUE(JoinParamsIntoOptions({}, &result));
73 EXPECT_EQ("", result);
74
75 EXPECT_TRUE(JoinParamsIntoOptions({"foo"}, &result));
76 EXPECT_EQ("foo", result);
77
78 EXPECT_TRUE(JoinParamsIntoOptions({"foo", "bar=baz", "abc=123"}, &result));
79 EXPECT_EQ("foo,bar=baz,abc=123", result);
80
81 EXPECT_FALSE(JoinParamsIntoOptions({"foo", "bar,zoo"}, &result));
82
83 EXPECT_FALSE(JoinParamsIntoOptions({"foo", "bar=baz,zoo"}, &result));
84}
85
Ben Chane31d2aa2011-06-15 13:52:59 -070086} // namespace cros_disks