Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Tests for the NewKeyStrategy
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/newkeystrategy.hpp>
13 :
14 : using namespace std;
15 : using namespace kdb;
16 : using namespace kdb::tools::merging;
17 :
18 32 : class NewKeyStrategyTest : public MergeTest
19 : {
20 : protected:
21 : NewKeyStrategy strategy;
22 : MergeResult result;
23 : MergeTask task;
24 : KeySet conflicts;
25 :
26 8 : NewKeyStrategyTest ()
27 64 : : task (MergeTask (BaseMergeKeys (base, baseParent), OurMergeKeys (ours, ourParent), TheirMergeKeys (theirs, theirParent),
28 40 : mergeParent))
29 : {
30 24 : result = MergeResult (conflicts, mergeKeys);
31 8 : }
32 : };
33 :
34 20 : TEST_F (NewKeyStrategyTest, AddEqualsKeyMerge)
35 : {
36 4 : Key addedKey = Key ("user/parento/config/key5", KEY_VALUE, "value5", KEY_END);
37 4 : task.ours.append (addedKey);
38 4 : mergeKeys.append (mk5);
39 6 : Key conflictKey = mergeKeys.lookup (mk5);
40 2 : result.addConflict (conflictKey, CONFLICT_ADD, CONFLICT_SAME);
41 12 : conflictKey = result.getConflictSet ().at (0);
42 :
43 2 : strategy.resolveConflict (task, conflictKey, result);
44 :
45 6 : EXPECT_FALSE (result.hasConflicts ()) << "Invalid conflict detected";
46 6 : KeySet merged = result.getMergedKeys ();
47 6 : EXPECT_EQ (5, merged.size ());
48 2 : compareAllKeys (merged);
49 2 : }
50 :
51 20 : TEST_F (NewKeyStrategyTest, AddEqualsRespectsBinaryData)
52 : {
53 4 : Key addedKey = Key ("user/parento/config/key5", KEY_BINARY, KEY_VALUE, "value5", KEY_END);
54 4 : task.ours.append (addedKey);
55 6 : Key conflictKey = mk5;
56 2 : result.addConflict (conflictKey, CONFLICT_ADD, CONFLICT_SAME);
57 12 : conflictKey = result.getConflictSet ().at (0);
58 :
59 2 : strategy.resolveConflict (task, conflictKey, result);
60 6 : EXPECT_TRUE (conflictKey.isBinary ());
61 2 : }
62 :
63 20 : TEST_F (NewKeyStrategyTest, EqualsAddKeyMerge)
64 : {
65 4 : Key addedKey = Key ("user/parentt/config/key5", KEY_VALUE, "value5", KEY_END);
66 4 : task.theirs.append (addedKey);
67 4 : mergeKeys.append (mk5);
68 6 : Key conflictKey = mergeKeys.lookup (mk5);
69 2 : result.addConflict (conflictKey, CONFLICT_SAME, CONFLICT_ADD);
70 12 : conflictKey = result.getConflictSet ().at (0);
71 :
72 2 : strategy.resolveConflict (task, conflictKey, result);
73 :
74 8 : EXPECT_FALSE (result.hasConflicts ()) << "Invalid conflict detected";
75 6 : KeySet merged = result.getMergedKeys ();
76 6 : EXPECT_EQ (5, merged.size ());
77 2 : compareAllKeys (merged);
78 2 : }
79 :
80 20 : TEST_F (NewKeyStrategyTest, EqualsAddRespectsBinaryData)
81 : {
82 4 : Key addedKey = Key ("user/parentt/config/key5", KEY_BINARY, KEY_VALUE, "value5", KEY_END);
83 4 : task.theirs.append (addedKey);
84 6 : Key conflictKey = mk5;
85 2 : result.addConflict (conflictKey, CONFLICT_SAME, CONFLICT_ADD);
86 12 : conflictKey = result.getConflictSet ().at (0);
87 :
88 2 : strategy.resolveConflict (task, conflictKey, result);
89 6 : EXPECT_TRUE (conflictKey.isBinary ());
90 8 : }
|