33import io .arex .agent .bootstrap .model .ArexMocker ;
44import io .arex .agent .bootstrap .model .MockCategoryType ;
55import io .arex .agent .bootstrap .model .Mocker ;
6+ import io .arex .agent .thirdparty .util .CompressUtil ;
67import io .arex .inst .runtime .config .Config ;
78import io .arex .inst .runtime .context .ArexContext ;
89import io .arex .inst .runtime .context .ContextManager ;
10+ import io .arex .inst .runtime .model .ArexConstants ;
911import io .arex .inst .runtime .model .MergeDTO ;
12+ import io .arex .inst .runtime .model .ReplayCompareResultDTO ;
1013import io .arex .inst .runtime .serializer .Serializer ;
1114import org .junit .jupiter .api .AfterAll ;
1215import org .junit .jupiter .api .BeforeAll ;
16+ import org .junit .jupiter .api .Test ;
1317import org .junit .jupiter .params .ParameterizedTest ;
1418import org .junit .jupiter .params .provider .Arguments ;
1519import org .junit .jupiter .params .provider .MethodSource ;
1620import org .mockito .Mockito ;
1721
1822import java .util .ArrayList ;
23+ import java .util .Collections ;
1924import java .util .HashMap ;
2025import java .util .List ;
2126import java .util .Map ;
27+ import java .util .concurrent .LinkedBlockingQueue ;
2228import java .util .stream .Stream ;
2329
2430import static org .junit .jupiter .api .Assertions .*;
2531import static org .junit .jupiter .params .provider .Arguments .arguments ;
2632import static org .mockito .ArgumentMatchers .any ;
27- import static org .mockito .ArgumentMatchers .anyString ;
33+ import static org .mockito .ArgumentMatchers .eq ;
2834
2935class ReplayUtilTest {
3036
3137 static ArexMocker requestMocker ;
38+ static ArexContext context ;
3239
3340 @ BeforeAll
3441 static void setUp () {
3542 Mockito .mockStatic (MockUtils .class );
3643 Mockito .mockStatic (ContextManager .class );
44+ Mockito .when (ContextManager .needReplay ()).thenReturn (true );
45+ context = Mockito .mock (ArexContext .class );
46+ Mockito .when (ContextManager .currentContext ()).thenReturn (context );
3747 Mockito .mockStatic (Config .class );
38- Mockito .when (Config .get ()).thenReturn (Mockito .mock (Config .class ));
48+ Config config = Mockito .mock (Config .class );
49+ Mockito .when (Config .get ()).thenReturn (config );
50+ Mockito .when (config .isEnableDebug ()).thenReturn (true );
3951 requestMocker = new ArexMocker (MockCategoryType .DYNAMIC_CLASS );
4052 requestMocker .setOperationName ("mock" );
4153 requestMocker .setTargetRequest (new Mocker .Target ());
4254 requestMocker .setTargetResponse (new Mocker .Target ());
4355 Mockito .when (MockUtils .create (any (), any ())).thenReturn (requestMocker );
4456 Mockito .mockStatic (Serializer .class );
57+ Mockito .mockStatic (CompressUtil .class );
4558 }
4659
4760 @ AfterAll
4861 static void tearDown () {
4962 requestMocker = null ;
63+ context = null ;
5064 Mockito .clearAllCaches ();
5165 }
5266
@@ -58,31 +72,93 @@ void queryMockers(Runnable mocker) {
5872 }
5973
6074 static Stream <Arguments > queryMockersCase () {
75+ List <Mocker > recordMockerList = new ArrayList <>();
76+ recordMockerList .add (requestMocker );
77+
6178 Runnable emptyMocker = () -> {};
6279 Runnable mocker1 = () -> {
63- Mockito .when (ContextManager .needReplay ()).thenReturn (true );
64- ArexContext context = Mockito .mock (ArexContext .class );
65- Mockito .when (ContextManager .currentContext ()).thenReturn (context );
6680 Map <Integer , List <Mocker >> cachedReplayResultMap = new HashMap <>();
6781 Mockito .when (context .getCachedReplayResultMap ()).thenReturn (cachedReplayResultMap );
6882 };
6983 Runnable mocker2 = () -> {
7084 Mockito .when (MockUtils .checkResponseMocker (any ())).thenReturn (true );
71- requestMocker .getTargetResponse ().setBody ("mock" );
72- Mockito .when (MockUtils .executeReplay (any (), any ())).thenReturn (requestMocker );
85+ requestMocker .setRequest ("mock" );
86+ requestMocker .setResponse ("mock" );
87+ ArexMocker databaseMocker = new ArexMocker (MockCategoryType .DATABASE );
88+ databaseMocker .setOperationName ("databse@table@select@query" );
89+ databaseMocker .setTargetRequest (new Mocker .Target ());
90+ databaseMocker .getTargetRequest ().setBody ("mock" );
91+ databaseMocker .setTargetResponse (new Mocker .Target ());
92+ recordMockerList .add (databaseMocker );
93+ ArexMocker databaseMocker2 = new ArexMocker (MockCategoryType .DATABASE );
94+ databaseMocker2 .setOperationName ("databse@table@select@query" );
95+ databaseMocker2 .setTargetRequest (new Mocker .Target ());
96+ databaseMocker2 .getTargetRequest ().setBody ("mock" );
97+ databaseMocker2 .setTargetResponse (new Mocker .Target ());
98+ recordMockerList .add (databaseMocker2 );
99+ ArexMocker databaseMocker3 = new ArexMocker (MockCategoryType .DATABASE );
100+ databaseMocker3 .setOperationName ("databse@table@select@query" );
101+ databaseMocker3 .setTargetRequest (new Mocker .Target ());
102+ databaseMocker3 .getTargetRequest ().setBody ("mock" );
103+ databaseMocker3 .setTargetResponse (new Mocker .Target ());
104+ databaseMocker3 .setCreationTime (System .currentTimeMillis () - 1000 );
105+ recordMockerList .add (databaseMocker3 );
106+ Mockito .when (MockUtils .queryMockers (any ())).thenReturn (recordMockerList );
107+ Mockito .when (Serializer .deserialize (any (), eq (ArexConstants .MOCKER_TARGET_TYPE ))).thenReturn (new Mocker .Target ());
73108 };
74109 Runnable mocker3 = () -> {
75- List <MergeDTO > mergeReplayList = new ArrayList <>();
76- MergeDTO mergeDTO = new MergeDTO ();
77- mergeDTO .setMethodRequestTypeHash (1 );
78- mergeReplayList .add (mergeDTO );
79- Mockito .when (Serializer .deserialize (anyString (), anyString ())).thenReturn (mergeReplayList );
110+ requestMocker .setOperationName ("arex.mergeRecord" );
111+ Mockito .when (Serializer .deserialize (any (), eq (ArexConstants .MERGE_TYPE ))).thenReturn (null );
112+ };
113+ List <MergeDTO > mergeReplayList = new ArrayList <>();
114+ MergeDTO mergeDTO = new MergeDTO ();
115+ mergeReplayList .add (mergeDTO );
116+ Runnable mocker4 = () -> {
117+ Mockito .when (Serializer .deserialize (any (), eq (ArexConstants .MERGE_TYPE ))).thenReturn (mergeReplayList );
118+ };
119+ Runnable mocker5 = () -> {
120+ mergeDTO .setCategory (MockCategoryType .DYNAMIC_CLASS .getName ());
80121 };
81122 return Stream .of (
82123 arguments (emptyMocker ),
83124 arguments (mocker1 ),
84125 arguments (mocker2 ),
85- arguments (mocker3 )
126+ arguments (mocker3 ),
127+ arguments (mocker4 ),
128+ arguments (mocker5 )
86129 );
87130 }
131+
132+ @ Test
133+ void saveReplayCompareResult () {
134+ assertDoesNotThrow (ReplayUtil ::saveReplayCompareResult );
135+ // replayCompareResultQueue is empty
136+ Mockito .when (context .isReplay ()).thenReturn (true );
137+ LinkedBlockingQueue <ReplayCompareResultDTO > replayCompareResultQueue = new LinkedBlockingQueue <>();
138+ Mockito .when (context .getReplayCompareResultQueue ()).thenReturn (replayCompareResultQueue );
139+ assertDoesNotThrow (ReplayUtil ::saveReplayCompareResult );
140+ // saveReplayCompareResult
141+ replayCompareResultQueue .offer (new ReplayCompareResultDTO ());
142+ Mockito .when (context .getReplayCompareResultQueue ()).thenReturn (replayCompareResultQueue );
143+ Map <Integer , List <Mocker >> cachedReplayResultMap = new HashMap <>();
144+ cachedReplayResultMap .put (1 , Collections .singletonList (requestMocker ));
145+ Mockito .when (context .getCachedReplayResultMap ()).thenReturn (cachedReplayResultMap );
146+ assertDoesNotThrow (ReplayUtil ::saveReplayCompareResult );
147+ }
148+
149+ @ Test
150+ void saveRemainCompareResult () {
151+ assertDoesNotThrow (() -> ReplayUtil .saveRemainCompareResult (null ));
152+
153+ Mockito .when (context .getReplayCompareResultQueue ()).thenReturn (new LinkedBlockingQueue <>());
154+ Map <Integer , List <Mocker >> cachedReplayResultMap = new HashMap <>();
155+ ArexMocker databaseMocker = new ArexMocker (MockCategoryType .DATABASE );
156+ databaseMocker .setOperationName ("databse@table@select@query" );
157+ databaseMocker .setTargetRequest (new Mocker .Target ());
158+ databaseMocker .getTargetRequest ().setBody ("mock" );
159+ databaseMocker .setTargetResponse (new Mocker .Target ());
160+ cachedReplayResultMap .put (1 , Collections .singletonList (databaseMocker ));
161+ Mockito .when (context .getCachedReplayResultMap ()).thenReturn (cachedReplayResultMap );
162+ assertDoesNotThrow (() -> ReplayUtil .saveRemainCompareResult (context ));
163+ }
88164}
0 commit comments