LCOV - code coverage report
Current view: top level - src/libs/tools/tests - testtool_onesidestrategy.cpp (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 84 84 100.0 %
Date: 2019-09-12 12:28:41 Functions: 16 29 55.2 %

          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 : }

Generated by: LCOV version 1.13