InvisibleProgrammer commented on code in PR #4707:
URL: https://github.com/apache/hive/pull/4707#discussion_r1337259651


##########
ql/src/test/org/apache/hadoop/hive/ql/exec/repl/TestAtlasDumpTask.java:
##########
@@ -92,48 +90,40 @@ public class TestAtlasDumpTask {
 
   @Test
   public void testAtlasDumpMetrics() throws Exception {
-    Mockito.when(work.getMetricCollector()).thenReturn(metricCollector);
-    
Mockito.when(conf.get(HiveConf.ConfVars.REPL_ATLAS_ENDPOINT.varname)).thenReturn("http://localhost:21000/atlas";);
-    
Mockito.when(conf.get(HiveConf.ConfVars.REPL_ATLAS_REPLICATED_TO_DB.varname)).thenReturn("tgtDb");
-    
Mockito.when(conf.get(HiveConf.ConfVars.REPL_SOURCE_CLUSTER_NAME.varname)).thenReturn("srcCluster");
-    
Mockito.when(conf.get(HiveConf.ConfVars.REPL_TARGET_CLUSTER_NAME.varname)).thenReturn("tgtCluster");
-    
Mockito.when(conf.get(ReplUtils.DEFAULT_FS_CONFIG)).thenReturn("hdfs:tgtFsUri:8020");
-    Mockito.when(work.getStagingDir()).thenReturn(new 
Path("hdfs://tmp:8020/staging"));
-    Mockito.when(work.getSrcDB()).thenReturn("srcDB");
-    Mockito.when(work.isBootstrap()).thenReturn(true);
-    atlasDumpTask = new AtlasDumpTask(atlasRestClient, conf, work);
+    AtlasDumpLogger logger = mock(AtlasDumpLogger.class);
+    when(work.getMetricCollector()).thenReturn(metricCollector);
+    
when(conf.get(HiveConf.ConfVars.REPL_ATLAS_ENDPOINT.varname)).thenReturn("http://localhost:21000/atlas";);
+    
when(conf.get(HiveConf.ConfVars.REPL_ATLAS_REPLICATED_TO_DB.varname)).thenReturn("tgtDb");
+    
when(conf.get(HiveConf.ConfVars.REPL_SOURCE_CLUSTER_NAME.varname)).thenReturn("srcCluster");
+    
when(conf.get(HiveConf.ConfVars.REPL_TARGET_CLUSTER_NAME.varname)).thenReturn("tgtCluster");
+    
when(conf.get(ReplUtils.DEFAULT_FS_CONFIG)).thenReturn("hdfs:tgtFsUri:8020");
+    when(work.getStagingDir()).thenReturn(new Path("hdfs://tmp:8020/staging"));
+    when(work.getSrcDB()).thenReturn("srcDB");
+    when(work.isBootstrap()).thenReturn(true);
+    ReplLoggerFactory replLoggerFactoryMock = mock(ReplLoggerFactory.class);
+    when(replLoggerFactoryMock.createAtlasDumpLogger(anyString(), 
anyString())).thenReturn(logger);
+    atlasDumpTask = new AtlasDumpTask(atlasRestClient, conf, work, 
replLoggerFactoryMock);
     AtlasDumpTask atlasDumpTaskSpy = Mockito.spy(atlasDumpTask);
-    
Mockito.when(conf.getBoolVar(HiveConf.ConfVars.HIVE_IN_TEST_REPL)).thenReturn(true);
-    Logger logger = Mockito.mock(Logger.class);
-    Whitebox.setInternalState(ReplState.class, logger);
+    
when(conf.getBoolVar(HiveConf.ConfVars.HIVE_IN_TEST_REPL)).thenReturn(true);
     Mockito.doReturn(0L).when(atlasDumpTaskSpy)
-      .dumpAtlasMetaData(Mockito.any(AtlasRequestBuilder.class), 
Mockito.any(AtlasReplInfo.class));
-    
Mockito.doNothing().when(atlasDumpTaskSpy).createDumpMetadata(Mockito.any(AtlasReplInfo.class),
-                                                                  
Mockito.any(Long.class));
+            .dumpAtlasMetaData(any(AtlasRequestBuilder.class), 
any(AtlasReplInfo.class));
+    
Mockito.doNothing().when(atlasDumpTaskSpy).createDumpMetadata(any(AtlasReplInfo.class),
+            any(Long.class));
     int status = atlasDumpTaskSpy.execute();
     Assert.assertEquals(0, status);
-    ArgumentCaptor<String> replStateCaptor = 
ArgumentCaptor.forClass(String.class);
-    ArgumentCaptor<Object> eventCaptor = ArgumentCaptor.forClass(Object.class);
-    ArgumentCaptor<Object> eventDetailsCaptor = 
ArgumentCaptor.forClass(Object.class);
-    Mockito.verify(logger,
-        Mockito.times(2)).info(replStateCaptor.capture(),
-        eventCaptor.capture(), eventDetailsCaptor.capture());
-    Assert.assertEquals("REPL::{}: {}", replStateCaptor.getAllValues().get(0));
-    Assert.assertEquals("ATLAS_DUMP_START", eventCaptor.getAllValues().get(0));
-    Assert.assertEquals("ATLAS_DUMP_END", eventCaptor.getAllValues().get(1));
-    Assert.assertTrue(eventDetailsCaptor.getAllValues().get(1).toString(), 
eventDetailsCaptor.getAllValues().get(0)
-        .toString().contains("{\"dbName\":\"srcDB\",\"dumpStartTime"));
-    Assert.assertTrue(eventDetailsCaptor
-        
.getAllValues().get(1).toString().contains("{\"dbName\":\"srcDB\",\"dumpEndTime\""));

Review Comment:
   The short answer is: 
   
   > Task related tests modified a little bit: instead of checking the log 
entries in the given metric tests, it just check if the startLog and endLog 
methods are properly called.
   
   The long answer is actually deep inside the abusing power of 
`Whitebox.setInternalState(ReplState.class, logger);` in PowerMock:
   
   This and all the ...Task related tests when you see that change pattern did 
the following: 
   - The execute method in the given task creates a logger. In that case, it is 
AtlasDumpLogger. 
   - And Whitebox.setInternalState combined with the replStateCaptor and other 
captors belove, basically checks if the logger is executed with that 
REPLS::ATLAS_DUMP_START and END text. 
   - The AtlasDumpLogger has two methods: startLog and endLog. And what they 
literally do is only one thing: logs the exact same text that was originally 
checked with the captors. 
   
   So that refactor actually checks if the startLog and endLog methods are 
called instead of checking the output of the startLog and endLog methods.  



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org
For additional commands, e-mail: gitbox-h...@hive.apache.org

Reply via email to