Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Tests for the OneSideStrategy
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #include "mergetestutils.cpp"
11 : #include <gtest/gtest.h>
12 : #include <merging/onesidestrategy.hpp>
13 :
14 : using namespace std;
15 : using namespace kdb;
16 : using namespace kdb::tools::merging;
17 :
18 36 : class OneSideStrategyTest : public MergeTest
19 : {
20 : protected:
21 : MergeResult result;
22 : MergeTask task;
23 : KeySet conflicts;
24 :
25 12 : OneSideStrategyTest ()
26 96 : : task (MergeTask (BaseMergeKeys (base, baseParent), OurMergeKeys (ours, ourParent), TheirMergeKeys (theirs, theirParent),
27 48 : mergeParent))
28 : {
29 36 : result = MergeResult (conflicts, mergeKeys);
30 12 : }
31 : };
32 :
33 20 : TEST_F (OneSideStrategyTest, BaseWinsCorrectly)
34 : {
35 20 : base.lookup ("user/parentb/config/key1").setString ("valueb");
36 20 : ours.lookup ("user/parento/config/key1").setString ("valueo");
37 20 : theirs.lookup ("user/parentt/config/key1").setString ("valuet");
38 6 : Key conflictKey = mk1;
39 2 : result.addConflict (conflictKey, CONFLICT_MODIFY, CONFLICT_MODIFY);
40 12 : conflictKey = result.getConflictSet ().at (0);
41 :
42 4 : OneSideStrategy strategy (BASE);
43 2 : strategy.resolveConflict (task, conflictKey, result);
44 :
45 6 : EXPECT_FALSE (result.hasConflicts ()) << "Invalid conflict detected";
46 6 : KeySet merged = result.getMergedKeys ();
47 4 : cout << merged << endl;
48 6 : EXPECT_EQ (4, merged.size ());
49 :
50 8 : compareKeys (Key ("user/parentm/config/key1", KEY_VALUE, "valueb", KEY_END), merged.lookup (mk1));
51 2 : }
52 :
53 20 : TEST_F (OneSideStrategyTest, BaseWinnerRespectsBinaryData)
54 : {
55 14 : base.lookup ("user/parentb/config/key1").setBinary ("valueb", 6);
56 20 : ours.lookup ("user/parento/config/key1").setString ("valueo");
57 20 : theirs.lookup ("user/parentt/config/key1").setString ("valuet");
58 6 : Key conflictKey = mk1;
59 2 : result.addConflict (conflictKey, CONFLICT_MODIFY, CONFLICT_MODIFY);
60 12 : conflictKey = result.getConflictSet ().at (0);
61 :
62 4 : OneSideStrategy strategy (BASE);
63 2 : strategy.resolveConflict (task, conflictKey, result);
64 :
65 6 : EXPECT_TRUE (conflictKey.isBinary ());
66 2 : }
67 :
68 20 : TEST_F (OneSideStrategyTest, OursWinsCorrectly)
69 : {
70 20 : base.lookup ("user/parentb/config/key1").setString ("valueb");
71 20 : ours.lookup ("user/parento/config/key1").setString ("valueo");
72 20 : theirs.lookup ("user/parentt/config/key1").setString ("valuet");
73 6 : Key conflictKey = mk1;
74 2 : result.addConflict (conflictKey, CONFLICT_MODIFY, CONFLICT_MODIFY);
75 12 : conflictKey = result.getConflictSet ().at (0);
76 :
77 4 : OneSideStrategy strategy (OURS);
78 2 : strategy.resolveConflict (task, conflictKey, result);
79 :
80 8 : EXPECT_FALSE (result.hasConflicts ()) << "Invalid conflict detected";
81 6 : KeySet merged = result.getMergedKeys ();
82 4 : cout << merged << endl;
83 6 : EXPECT_EQ (4, merged.size ());
84 :
85 8 : compareKeys (Key ("user/parentm/config/key1", KEY_VALUE, "valueo", KEY_END), merged.lookup (mk1));
86 2 : }
87 :
88 20 : TEST_F (OneSideStrategyTest, OursWinnerRespectsBinaryData)
89 : {
90 20 : base.lookup ("user/parentb/config/key1").setString ("valueb");
91 14 : ours.lookup ("user/parento/config/key1").setBinary ("valueo", 6);
92 20 : theirs.lookup ("user/parentt/config/key1").setString ("valuet");
93 6 : Key conflictKey = mk1;
94 2 : result.addConflict (conflictKey, CONFLICT_MODIFY, CONFLICT_MODIFY);
95 12 : conflictKey = result.getConflictSet ().at (0);
96 :
97 4 : OneSideStrategy strategy (OURS);
98 2 : strategy.resolveConflict (task, conflictKey, result);
99 :
100 6 : EXPECT_TRUE (conflictKey.isBinary ());
101 2 : }
102 :
103 20 : TEST_F (OneSideStrategyTest, TheirsWinsCorrectly)
104 : {
105 20 : base.lookup ("user/parentb/config/key1").setString ("valueb");
106 20 : ours.lookup ("user/parento/config/key1").setString ("valueo");
107 20 : theirs.lookup ("user/parentt/config/key1").setString ("valuet");
108 6 : Key conflictKey = mk1;
109 2 : result.addConflict (conflictKey, CONFLICT_MODIFY, CONFLICT_MODIFY);
110 12 : conflictKey = result.getConflictSet ().at (0);
111 :
112 4 : OneSideStrategy strategy (THEIRS);
113 2 : strategy.resolveConflict (task, conflictKey, result);
114 :
115 8 : EXPECT_FALSE (result.hasConflicts ()) << "Invalid conflict detected";
116 6 : KeySet merged = result.getMergedKeys ();
117 4 : cout << merged << endl;
118 6 : EXPECT_EQ (4, merged.size ());
119 :
120 8 : compareKeys (Key ("user/parentm/config/key1", KEY_VALUE, "valuet", KEY_END), merged.lookup (mk1));
121 2 : }
122 :
123 20 : TEST_F (OneSideStrategyTest, TheirsWinnerRespectsBinaryData)
124 : {
125 20 : base.lookup ("user/parentb/config/key1").setString ("valueb");
126 20 : ours.lookup ("user/parento/config/key1").setString ("valueo");
127 14 : theirs.lookup ("user/parentt/config/key1").setBinary ("valuet", 6);
128 6 : Key conflictKey = mk1;
129 2 : result.addConflict (conflictKey, CONFLICT_MODIFY, CONFLICT_MODIFY);
130 12 : conflictKey = result.getConflictSet ().at (0);
131 :
132 4 : OneSideStrategy strategy (THEIRS);
133 2 : strategy.resolveConflict (task, conflictKey, result);
134 :
135 6 : EXPECT_TRUE (conflictKey.isBinary ());
136 8 : }
|