This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 753a7dd  Replace PowerMock/EasyMock by Jmockit (3/4)
753a7dd is described below

commit 753a7dd73a3f00502d523844fad5ceef8291620f
Author: xy720 <22125576+xy...@users.noreply.github.com>
AuthorDate: Thu Jan 16 13:24:43 2020 +0800

    Replace PowerMock/EasyMock by Jmockit (3/4)
---
 .../apache/doris/analysis/AddColumnClauseTest.java | 146 +++++++---
 .../apache/doris/analysis/CancelAlterStmtTest.java |   8 -
 .../apache/doris/analysis/DropTableStmtTest.java   |  18 +-
 .../org/apache/doris/analysis/LabelNameTest.java   |  40 ++-
 .../doris/analysis/ModifyColumnClauseTest.java     |  25 +-
 .../doris/catalog/MaterializedIndexTest.java       |  24 +-
 .../doris/common/proc/BackendsProcDirTest.java     | 132 +++++----
 .../org/apache/doris/mysql/MysqlChannelTest.java   | 297 ++++++++++++---------
 .../doris/mysql/MysqlHandshakePacketTest.java      |  25 +-
 .../org/apache/doris/mysql/MysqlProtoTest.java     | 157 ++++++-----
 .../org/apache/doris/mysql/MysqlServerTest.java    |  31 ++-
 .../org/apache/doris/qe/SimpleSchedulerTest.java   |  53 ++--
 .../org/apache/doris/task/LoadEtlTaskTest.java     |  93 ++++---
 .../org/apache/doris/task/LoadPendingTaskTest.java | 106 +++++---
 14 files changed, 695 insertions(+), 460 deletions(-)

diff --git 
a/fe/src/test/java/org/apache/doris/analysis/AddColumnClauseTest.java 
b/fe/src/test/java/org/apache/doris/analysis/AddColumnClauseTest.java
index 410903e..f966340 100644
--- a/fe/src/test/java/org/apache/doris/analysis/AddColumnClauseTest.java
+++ b/fe/src/test/java/org/apache/doris/analysis/AddColumnClauseTest.java
@@ -17,10 +17,11 @@
 
 package org.apache.doris.analysis;
 
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarType;
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -31,6 +32,9 @@ import org.apache.doris.common.AnalysisException;
 public class AddColumnClauseTest {
     private static Analyzer analyzer;
 
+    @Mocked
+    ColumnDef definition;
+
     @BeforeClass
     public static void setUp() {
         analyzer = AccessTestUtil.fetchAdminAnalyzer(false);
@@ -39,15 +43,32 @@ public class AddColumnClauseTest {
     @Test
     public void testNormal() throws AnalysisException {
         Column column = new Column("testCol", 
ScalarType.createType(PrimitiveType.INT));
-        ColumnDef definition = EasyMock.createMock(ColumnDef.class);
-        definition.analyze(true);
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(definition.toSql()).andReturn("`testCol` 
INT").anyTimes();
-        EasyMock.expect(definition.getDefaultValue()).andReturn("").anyTimes();
-        
EasyMock.expect(definition.getAggregateType()).andReturn(null).anyTimes();
-        EasyMock.expect(definition.isAllowNull()).andReturn(false).anyTimes();
-        EasyMock.expect(definition.toColumn()).andReturn(column).anyTimes();
-        EasyMock.replay(definition);
+        new Expectations() {
+            {
+                definition.analyze(true);
+                minTimes = 0;
+
+                definition.toSql();
+                minTimes = 0;
+                result = "`testCol` INT";
+
+                definition.getDefaultValue();
+                minTimes = 0;
+                result = "";
+
+                definition.getAggregateType();
+                minTimes = 0;
+                result = null;
+
+                definition.isAllowNull();
+                minTimes = 0;
+                result = false;
+
+                definition.toColumn();
+                minTimes = 0;
+                result = column;
+            }
+        };
 
         AddColumnClause clause = new AddColumnClause(definition, null, null, 
null);
         clause.analyze(analyzer);
@@ -78,15 +99,32 @@ public class AddColumnClauseTest {
 
     @Test(expected = AnalysisException.class)
     public void testNoDefault() throws AnalysisException {
-        ColumnDef definition = EasyMock.createMock(ColumnDef.class);
-        definition.analyze(true);
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(definition.toSql()).andReturn("`testCol` 
INT").anyTimes();
-        
EasyMock.expect(definition.getDefaultValue()).andReturn(null).anyTimes();
-        
EasyMock.expect(definition.getAggregateType()).andReturn(null).anyTimes();
-        EasyMock.expect(definition.getName()).andReturn("testCol").anyTimes();
-        EasyMock.expect(definition.isAllowNull()).andReturn(false).anyTimes();
-        EasyMock.replay(definition);
+        new Expectations() {
+            {
+                definition.analyze(true);
+                minTimes = 0;
+
+                definition.toSql();
+                minTimes = 0;
+                result = "`testCol` INT";
+
+                definition.getDefaultValue();
+                minTimes = 0;
+                result = null;
+
+                definition.getAggregateType();
+                minTimes = 0;
+                result = null;
+
+                definition.getName();
+                minTimes = 0;
+                result = "testCol";
+
+                definition.isAllowNull();
+                minTimes = 0;
+                result = false;
+            }
+        };
         AddColumnClause clause = new AddColumnClause(definition, null, null, 
null);
         clause.analyze(analyzer);
         Assert.fail("No exception throws.");
@@ -94,15 +132,32 @@ public class AddColumnClauseTest {
 
     @Test(expected = AnalysisException.class)
     public void testAggPos() throws AnalysisException {
-        ColumnDef definition = EasyMock.createMock(ColumnDef.class);
-        definition.analyze(true);
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(definition.toSql()).andReturn("`testCol` 
INT").anyTimes();
-        
EasyMock.expect(definition.getDefaultValue()).andReturn(null).anyTimes();
-        
EasyMock.expect(definition.getAggregateType()).andReturn(AggregateType.SUM).anyTimes();
-        EasyMock.expect(definition.getName()).andReturn("testCol").anyTimes();
-        EasyMock.expect(definition.isAllowNull()).andReturn(false).anyTimes();
-        EasyMock.replay(definition);
+        new Expectations() {
+            {
+                definition.analyze(true);
+                minTimes = 0;
+
+                definition.toSql();
+                minTimes = 0;
+                result = "`testCol` INT";
+
+                definition.getDefaultValue();
+                minTimes = 0;
+                result = null;
+
+                definition.getAggregateType();
+                minTimes = 0;
+                result = AggregateType.SUM;
+
+                definition.getName();
+                minTimes = 0;
+                result = "testCol";
+
+                definition.isAllowNull();
+                minTimes = 0;
+                result = false;
+            }
+        };
         AddColumnClause clause = new AddColumnClause(definition, 
ColumnPosition.FIRST, null, null);
         clause.analyze(analyzer);
         Assert.fail("No exception throws.");
@@ -110,15 +165,32 @@ public class AddColumnClauseTest {
 
     @Test(expected = AnalysisException.class)
     public void testAddValueToFirst() throws AnalysisException {
-        ColumnDef definition = EasyMock.createMock(ColumnDef.class);
-        definition.analyze(true);
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(definition.toSql()).andReturn("`testCol` 
INT").anyTimes();
-        
EasyMock.expect(definition.getDefaultValue()).andReturn("2").anyTimes();
-        
EasyMock.expect(definition.getAggregateType()).andReturn(AggregateType.SUM).anyTimes();
-        EasyMock.expect(definition.getName()).andReturn("testCol").anyTimes();
-        EasyMock.expect(definition.isAllowNull()).andReturn(false).anyTimes();
-        EasyMock.replay(definition);
+        new Expectations() {
+            {
+                definition.analyze(true);
+                minTimes = 0;
+
+                definition.toSql();
+                minTimes = 0;
+                result = "`testCol` INT";
+
+                definition.getDefaultValue();
+                minTimes = 0;
+                result = "2";
+
+                definition.getAggregateType();
+                minTimes = 0;
+                result = AggregateType.SUM;
+
+                definition.getName();
+                minTimes = 0;
+                result = "testCol";
+
+                definition.isAllowNull();
+                minTimes = 0;
+                result = false;
+            }
+        };
         AddColumnClause clause = new AddColumnClause(definition, 
ColumnPosition.FIRST, null, null);
         clause.analyze(analyzer);
         Assert.fail("No exception throws.");
diff --git 
a/fe/src/test/java/org/apache/doris/analysis/CancelAlterStmtTest.java 
b/fe/src/test/java/org/apache/doris/analysis/CancelAlterStmtTest.java
index 7ea31e9..9fdc95d 100644
--- a/fe/src/test/java/org/apache/doris/analysis/CancelAlterStmtTest.java
+++ b/fe/src/test/java/org/apache/doris/analysis/CancelAlterStmtTest.java
@@ -26,19 +26,11 @@ import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.FakeCatalog;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.UserException;
-import org.apache.doris.mysql.privilege.PaloAuth;
-import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
 
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
 public class CancelAlterStmtTest {
 
diff --git a/fe/src/test/java/org/apache/doris/analysis/DropTableStmtTest.java 
b/fe/src/test/java/org/apache/doris/analysis/DropTableStmtTest.java
index 414b9a0..8c28d0d 100644
--- a/fe/src/test/java/org/apache/doris/analysis/DropTableStmtTest.java
+++ b/fe/src/test/java/org/apache/doris/analysis/DropTableStmtTest.java
@@ -17,13 +17,13 @@
 
 package org.apache.doris.analysis;
 
+import mockit.Expectations;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.UserException;
 import org.apache.doris.mysql.privilege.MockedAuth;
 import org.apache.doris.mysql.privilege.PaloAuth;
 import org.apache.doris.qe.ConnectContext;
 
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -34,6 +34,7 @@ public class DropTableStmtTest {
     private TableName tbl;
     private TableName noDbTbl;
     private Analyzer analyzer;
+    @Mocked
     private Analyzer noDbAnalyzer;
 
     @Mocked
@@ -47,10 +48,17 @@ public class DropTableStmtTest {
         noDbTbl = new TableName("", "table1");
         analyzer = AccessTestUtil.fetchAdminAnalyzer(true);
 
-        noDbAnalyzer = EasyMock.createMock(Analyzer.class);
-        EasyMock.expect(noDbAnalyzer.getDefaultDb()).andReturn("").anyTimes();
-        
EasyMock.expect(noDbAnalyzer.getClusterName()).andReturn("testCluster").anyTimes();
-        EasyMock.replay(noDbAnalyzer);
+        new Expectations() {
+            {
+                noDbAnalyzer.getDefaultDb();
+                minTimes = 0;
+                result = "";
+
+                noDbAnalyzer.getClusterName();
+                minTimes = 0;
+                result = "testCluster";
+            }
+        };
 
         MockedAuth.mockedAuth(auth);
         MockedAuth.mockedConnectContext(ctx, "root", "192.168.1.1");
diff --git a/fe/src/test/java/org/apache/doris/analysis/LabelNameTest.java 
b/fe/src/test/java/org/apache/doris/analysis/LabelNameTest.java
index d52708b..e2e367a 100644
--- a/fe/src/test/java/org/apache/doris/analysis/LabelNameTest.java
+++ b/fe/src/test/java/org/apache/doris/analysis/LabelNameTest.java
@@ -17,26 +17,38 @@
 
 package org.apache.doris.analysis;
 
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.common.AnalysisException;
 
 import org.junit.Assert;
-import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
 
 public class LabelNameTest {
+    @Mocked
     private Analyzer analyzer;
 
     @Before
     public void setUp() {
-        analyzer = EasyMock.createMock(Analyzer.class);
-        
EasyMock.expect(analyzer.getClusterName()).andReturn("testCluster").anyTimes();
+        new Expectations() {
+            {
+                analyzer.getClusterName();
+                minTimes = 0;
+                result = "testCluster";
+            }
+        };
     }
 
     @Test
     public void testNormal() throws AnalysisException {
-        
EasyMock.expect(analyzer.getDefaultDb()).andReturn("testDb").anyTimes();
-        EasyMock.replay(analyzer);
+        new Expectations() {
+            {
+                analyzer.getDefaultDb();
+                minTimes = 0;
+                result = "testDb";
+            }
+        };
 
         LabelName label = new LabelName("testDb", "testLabel");
         label.analyze(analyzer);
@@ -51,8 +63,13 @@ public class LabelNameTest {
 
     @Test(expected = AnalysisException.class)
     public void testNoDb() throws AnalysisException {
-        EasyMock.expect(analyzer.getDefaultDb()).andReturn(null).anyTimes();
-        EasyMock.replay(analyzer);
+        new Expectations() {
+            {
+                analyzer.getDefaultDb();
+                minTimes = 0;
+                result = null;
+            }
+        };
 
         LabelName label = new LabelName("", "testLabel");
         label.analyze(analyzer);
@@ -61,8 +78,13 @@ public class LabelNameTest {
 
     @Test(expected = AnalysisException.class)
     public void testNoLabel() throws AnalysisException {
-        
EasyMock.expect(analyzer.getDefaultDb()).andReturn("testDb").anyTimes();
-        EasyMock.replay(analyzer);
+        new Expectations() {
+            {
+                analyzer.getDefaultDb();
+                minTimes = 0;
+                result = "testDb";
+            }
+        };
 
         LabelName label = new LabelName("", "");
         label.analyze(analyzer);
diff --git 
a/fe/src/test/java/org/apache/doris/analysis/ModifyColumnClauseTest.java 
b/fe/src/test/java/org/apache/doris/analysis/ModifyColumnClauseTest.java
index b3bf907..074678b 100644
--- a/fe/src/test/java/org/apache/doris/analysis/ModifyColumnClauseTest.java
+++ b/fe/src/test/java/org/apache/doris/analysis/ModifyColumnClauseTest.java
@@ -17,8 +17,9 @@
 
 package org.apache.doris.analysis;
 
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.catalog.PrimitiveType;
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -35,14 +36,22 @@ public class ModifyColumnClauseTest {
     }
 
     @Test
-    public void testNormal() throws AnalysisException {
+    public void testNormal(@Mocked ColumnDef definition) throws 
AnalysisException {
         Column column = new Column("tsetCol", PrimitiveType.INT);
-        ColumnDef definition = EasyMock.createMock(ColumnDef.class);
-        definition.analyze(true);
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.expect(definition.toSql()).andReturn("`testCol` 
INT").anyTimes();
-        EasyMock.expect(definition.toColumn()).andReturn(column).anyTimes();
-        EasyMock.replay(definition);
+        new Expectations() {
+            {
+                definition.analyze(true);
+                minTimes = 0;
+
+                definition.toSql();
+                minTimes = 0;
+                result = "`testCol` INT";
+
+                definition.toColumn();
+                minTimes = 0;
+                result = column;
+            }
+        };
 
         ModifyColumnClause clause = new ModifyColumnClause(definition, null, 
null, null);
         clause.analyze(analyzer);
diff --git 
a/fe/src/test/java/org/apache/doris/catalog/MaterializedIndexTest.java 
b/fe/src/test/java/org/apache/doris/catalog/MaterializedIndexTest.java
index 205c69d..a04432d 100644
--- a/fe/src/test/java/org/apache/doris/catalog/MaterializedIndexTest.java
+++ b/fe/src/test/java/org/apache/doris/catalog/MaterializedIndexTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.catalog;
 
+import mockit.Mocked;
 import org.apache.doris.catalog.MaterializedIndex.IndexState;
 import org.apache.doris.common.FeConstants;
 
@@ -28,27 +29,21 @@ import java.io.FileOutputStream;
 import java.util.LinkedList;
 import java.util.List;
 
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({ "org.apache.log4j.*", "javax.management.*" })
-@PrepareForTest(Catalog.class)
+
 public class MaterializedIndexTest {
 
     private MaterializedIndex index;
     private long indexId;
 
     private List<Column> columns;
+    @Mocked
     private Catalog catalog;
 
+    private FakeCatalog fakeCatalog;
+
     @Before
     public void setUp() {
         indexId = 10000;
@@ -59,12 +54,9 @@ public class MaterializedIndexTest {
         columns.add(new Column("v1", ScalarType.createType(PrimitiveType.INT), 
false, AggregateType.REPLACE, "", ""));
         index = new MaterializedIndex(indexId, IndexState.NORMAL);
 
-        catalog = EasyMock.createMock(Catalog.class);
-
-        PowerMock.mockStatic(Catalog.class);
-        EasyMock.expect(Catalog.getInstance()).andReturn(catalog).anyTimes();
-        
EasyMock.expect(Catalog.getCurrentCatalogJournalVersion()).andReturn(FeConstants.meta_version).anyTimes();
-        PowerMock.replay(Catalog.class);
+        fakeCatalog = new FakeCatalog();
+        FakeCatalog.setCatalog(catalog);
+        FakeCatalog.setMetaVersion(FeConstants.meta_version);
     }
 
     @Test
diff --git 
a/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java 
b/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java
index 642ca55..ab97881 100644
--- a/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java
+++ b/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.common.proc;
 
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.TabletInvertedIndex;
 import org.apache.doris.common.AnalysisException;
@@ -24,75 +26,91 @@ import org.apache.doris.persist.EditLog;
 import org.apache.doris.system.Backend;
 import org.apache.doris.system.SystemInfoService;
 
-import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({ "org.apache.log4j.*", "javax.management.*" })
-@PrepareForTest(Catalog.class)
+
 public class BackendsProcDirTest {
-    private static Backend b1;
-    private static Backend b2;
-
-    private static SystemInfoService systemInfoService;
-    private static TabletInvertedIndex tabletInvertedIndex;
-
-    private static Catalog catalog;
-    private static EditLog editLog;
-
-    // construct test case
-    @BeforeClass
-    public static void setUpClass() {
-        editLog = EasyMock.createMock(EditLog.class);
-        editLog.logAddBackend(EasyMock.anyObject(Backend.class));
-        EasyMock.expectLastCall().anyTimes();
-        editLog.logDropBackend(EasyMock.anyObject(Backend.class));
-        EasyMock.expectLastCall().anyTimes();
-        editLog.logBackendStateChange(EasyMock.anyObject(Backend.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.replay(editLog);
-
-        catalog = EasyMock.createMock(Catalog.class);
-        EasyMock.expect(catalog.getNextId()).andReturn(10000L).anyTimes();
-        EasyMock.expect(catalog.getEditLog()).andReturn(editLog).anyTimes();
-        catalog.clear();
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.replay(catalog);
+    private Backend b1;
+    private Backend b2;
+
+    @Mocked
+    private SystemInfoService systemInfoService;
+    @Mocked
+    private TabletInvertedIndex tabletInvertedIndex;
+    @Mocked
+    private Catalog catalog;
+    @Mocked
+    private EditLog editLog;
 
+    @Before
+    public void setUp() {
         b1 = new Backend(1000, "host1", 10000);
         b1.updateOnce(10001, 10003, 10005);
         b2 = new Backend(1001, "host2", 20000);
         b2.updateOnce(20001, 20003, 20005);
 
-        systemInfoService = EasyMock.createNiceMock(SystemInfoService.class);
-        
EasyMock.expect(systemInfoService.getBackend(1000)).andReturn(b1).anyTimes();
-        
EasyMock.expect(systemInfoService.getBackend(1001)).andReturn(b2).anyTimes();
-        
EasyMock.expect(systemInfoService.getBackend(1002)).andReturn(null).anyTimes();
-        EasyMock.replay(systemInfoService);
-
-        tabletInvertedIndex = 
EasyMock.createNiceMock(TabletInvertedIndex.class);
-        
EasyMock.expect(tabletInvertedIndex.getTabletNumByBackendId(EasyMock.anyLong())).andReturn(2).anyTimes();
-        EasyMock.replay(tabletInvertedIndex);
-
-        PowerMock.mockStatic(Catalog.class);
-        EasyMock.expect(Catalog.getInstance()).andReturn(catalog).anyTimes();
-        
EasyMock.expect(Catalog.getCurrentSystemInfo()).andReturn(systemInfoService).anyTimes();
-        
EasyMock.expect(Catalog.getCurrentInvertedIndex()).andReturn(tabletInvertedIndex).anyTimes();
-        PowerMock.replay(Catalog.class);
-    }
+        new Expectations() {
+            {
+                editLog.logAddBackend((Backend) any);
+                minTimes = 0;
+
+                editLog.logDropBackend((Backend) any);
+                minTimes = 0;
+
+                editLog.logBackendStateChange((Backend) any);
+                minTimes = 0;
+
+                catalog.getNextId();
+                minTimes = 0;
+                result = 10000L;
+
+                catalog.getEditLog();
+                minTimes = 0;
+                result = editLog;
+
+                catalog.clear();
+                minTimes = 0;
+
+                systemInfoService.getBackend(1000);
+                minTimes = 0;
+                result = b1;
+
+                systemInfoService.getBackend(1001);
+                minTimes = 0;
+                result = b2;
+
+                systemInfoService.getBackend(1002);
+                minTimes = 0;
+                result = null;
+
+                tabletInvertedIndex.getTabletNumByBackendId(anyLong);
+                minTimes = 0;
+                result = 2;
+            }
+        };
+
+        new Expectations(catalog) {
+            {
+                Catalog.getInstance();
+                minTimes = 0;
+                result = catalog;
+
+                Catalog.getCurrentCatalog();
+                minTimes = 0;
+                result = catalog;
+
+                Catalog.getCurrentInvertedIndex();
+                minTimes = 0;
+                result = tabletInvertedIndex;
+
+                Catalog.getCurrentSystemInfo();
+                minTimes = 0;
+                result = systemInfoService;
+            }
+        };
 
-    @Before
-    public void setUp() {
-        // systemInfoService = 
EasyMock.createNiceMock(SystemInfoService.class);
     }
 
     @After
diff --git a/fe/src/test/java/org/apache/doris/mysql/MysqlChannelTest.java 
b/fe/src/test/java/org/apache/doris/mysql/MysqlChannelTest.java
index 3474a72..417480e 100644
--- a/fe/src/test/java/org/apache/doris/mysql/MysqlChannelTest.java
+++ b/fe/src/test/java/org/apache/doris/mysql/MysqlChannelTest.java
@@ -17,7 +17,9 @@
 
 package org.apache.doris.mysql;
 
-import org.easymock.EasyMock;
+import mockit.Delegate;
+import mockit.Expectations;
+import mockit.Mocked;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -30,44 +32,54 @@ import java.nio.channels.SocketChannel;
 public class MysqlChannelTest {
     int packetId = 0;
     int readIdx = 0;
+    @Mocked
     private SocketChannel channel;
 
     @Before
     public void setUp() throws IOException {
         packetId = 0;
         readIdx = 0;
-        channel = EasyMock.createMock(SocketChannel.class);
-        EasyMock.expect(channel.getRemoteAddress()).andReturn(new 
InetSocketAddress(1024)).anyTimes();
+        new Expectations() {
+            {
+                channel.getRemoteAddress();
+                minTimes = 0;
+                result = new InetSocketAddress(1024);
+            }
+        };
     }
 
     @Test
     public void testReceive() throws IOException {
         // mock
-        
EasyMock.expect(channel.read(EasyMock.anyObject(ByteBuffer.class))).andDelegateTo(new
 WrapperSocketChannel() {
-            @Override
-            public int read(ByteBuffer buffer) {
-                MysqlSerializer serializer = MysqlSerializer.newInstance();
-                if (readIdx == 0) {
-                    readIdx++;
-                    serializer.writeInt3(10);
-                    serializer.writeInt1(packetId++);
-
-                    buffer.put(serializer.toArray());
-                    return 4;
-                } else if (readIdx == 1) {
-                    readIdx++;
-                    byte[] buf = new byte[buffer.remaining()];
-                    for (int i = 0; i < buffer.remaining(); ++i) {
-                        buf[i] = (byte) ('a' + i);
-
+        new Expectations() {
+            {
+                channel.read((ByteBuffer) any);
+                minTimes = 0;
+                result = new Delegate() {
+                    int fakeRead(ByteBuffer buffer) {
+                        MysqlSerializer serializer = 
MysqlSerializer.newInstance();
+                        if (readIdx == 0) {
+                            readIdx++;
+                            serializer.writeInt3(10);
+                            serializer.writeInt1(packetId++);
+
+                            buffer.put(serializer.toArray());
+                            return 4;
+                        } else if (readIdx == 1) {
+                            readIdx++;
+                            byte[] buf = new byte[buffer.remaining()];
+                            for (int i = 0; i < buffer.remaining(); ++i) {
+                                buf[i] = (byte) ('a' + i);
+
+                            }
+                            buffer.put(buf);
+                            return 10;
+                        }
+                        return -1;
                     }
-                    buffer.put(buf);
-                    return 10;
-                }
-                return -1;
+                };
             }
-        }).anyTimes();
-        EasyMock.replay(channel);
+        };
 
         MysqlChannel channel1 = new MysqlChannel(channel);
 
@@ -81,53 +93,56 @@ public class MysqlChannelTest {
     @Test
     public void testLongPacket() throws IOException {
         // mock
-        
EasyMock.expect(channel.read(EasyMock.anyObject(ByteBuffer.class))).andDelegateTo(new
 WrapperSocketChannel() {
-            @Override
-            public int read(ByteBuffer buffer) {
-                int maxLen = 0xffffff - 1;
-                MysqlSerializer serializer = MysqlSerializer.newInstance();
-                if (readIdx == 0) {
-                    // packet
-                    readIdx++;
-                    serializer.writeInt3(maxLen);
-                    serializer.writeInt1(packetId++);
-
-                    buffer.put(serializer.toArray());
-                    return 4;
-                } else if (readIdx == 1) {
-                    readIdx++;
-                    int readLen = buffer.remaining();
-                    byte[] buf = new byte[readLen];
-                    for (int i = 0; i < readLen; ++i) {
-                        buf[i] = (byte) ('a' + (i % 26));
-
-                    }
-                    buffer.put(buf);
-                    return readLen;
-                } else if (readIdx == 2) {
-                    // packet
-                    readIdx++;
-                    serializer.writeInt3(10);
-                    serializer.writeInt1(packetId++);
-
-                    buffer.put(serializer.toArray());
-                    return 4;
-                } else if (readIdx == 3) {
-                    readIdx++;
-                    int readLen = buffer.remaining();
-                    byte[] buf = new byte[readLen];
-                    for (int i = 0; i < readLen; ++i) {
-                        buf[i] = (byte) ('a' + (maxLen + i) % 26);
-
+        new Expectations() {
+            {
+                channel.read((ByteBuffer) any);
+                minTimes = 0;
+                result = new Delegate() {
+                    int fakeRead(ByteBuffer buffer) {
+                        int maxLen = 0xffffff - 1;
+                        MysqlSerializer serializer = 
MysqlSerializer.newInstance();
+                        if (readIdx == 0) {
+                            // packet
+                            readIdx++;
+                            serializer.writeInt3(maxLen);
+                            serializer.writeInt1(packetId++);
+
+                            buffer.put(serializer.toArray());
+                            return 4;
+                        } else if (readIdx == 1) {
+                            readIdx++;
+                            int readLen = buffer.remaining();
+                            byte[] buf = new byte[readLen];
+                            for (int i = 0; i < readLen; ++i) {
+                                buf[i] = (byte) ('a' + (i % 26));
+
+                            }
+                            buffer.put(buf);
+                            return readLen;
+                        } else if (readIdx == 2) {
+                            // packet
+                            readIdx++;
+                            serializer.writeInt3(10);
+                            serializer.writeInt1(packetId++);
+
+                            buffer.put(serializer.toArray());
+                            return 4;
+                        } else if (readIdx == 3) {
+                            readIdx++;
+                            int readLen = buffer.remaining();
+                            byte[] buf = new byte[readLen];
+                            for (int i = 0; i < readLen; ++i) {
+                                buf[i] = (byte) ('a' + (maxLen + i) % 26);
+
+                            }
+                            buffer.put(buf);
+                            return readLen;
+                        }
+                        return 0;
                     }
-                    buffer.put(buf);
-                    return readLen;
-                }
-                return 0;
+                };
             }
-
-        }).anyTimes();
-        EasyMock.replay(channel);
+        };
 
         MysqlChannel channel1 = new MysqlChannel(channel);
 
@@ -141,52 +156,56 @@ public class MysqlChannelTest {
     @Test(expected = IOException.class)
     public void testBadSeq() throws IOException {
         // mock
-        
EasyMock.expect(channel.read(EasyMock.anyObject(ByteBuffer.class))).andDelegateTo(new
 WrapperSocketChannel() {
-            @Override
-            public int read(ByteBuffer buffer) {
-                int maxLen = 0xffffff - 1;
-                MysqlSerializer serializer = MysqlSerializer.newInstance();
-                if (readIdx == 0) {
-                    // packet
-                    readIdx++;
-                    serializer.writeInt3(maxLen);
-                    serializer.writeInt1(packetId++);
-
-                    buffer.put(serializer.toArray());
-                    return 4;
-                } else if (readIdx == 1) {
-                    readIdx++;
-                    int readLen = buffer.remaining();
-                    byte[] buf = new byte[readLen];
-                    for (int i = 0; i < readLen; ++i) {
-                        buf[i] = (byte) ('a' + (i % 26));
-
+        new Expectations() {
+            {
+                channel.read((ByteBuffer) any);
+                minTimes = 0;
+                result = new Delegate() {
+                    int fakeRead(ByteBuffer buffer) {
+                        int maxLen = 0xffffff - 1;
+                        MysqlSerializer serializer = 
MysqlSerializer.newInstance();
+                        if (readIdx == 0) {
+                            // packet
+                            readIdx++;
+                            serializer.writeInt3(maxLen);
+                            serializer.writeInt1(packetId++);
+
+                            buffer.put(serializer.toArray());
+                            return 4;
+                        } else if (readIdx == 1) {
+                            readIdx++;
+                            int readLen = buffer.remaining();
+                            byte[] buf = new byte[readLen];
+                            for (int i = 0; i < readLen; ++i) {
+                                buf[i] = (byte) ('a' + (i % 26));
+
+                            }
+                            buffer.put(buf);
+                            return readLen;
+                        } else if (readIdx == 2) {
+                            // packet
+                            readIdx++;
+                            serializer.writeInt3(10);
+                            // NOTE: Bad packet seq
+                            serializer.writeInt1(0);
+
+                            buffer.put(serializer.toArray());
+                            return 4;
+                        } else if (readIdx == 3) {
+                            readIdx++;
+                            byte[] buf = new byte[buffer.remaining()];
+                            for (int i = 0; i < buffer.remaining(); ++i) {
+                                buf[i] = (byte) ('a' + (i % 26));
+
+                            }
+                            buffer.put(buf);
+                            return buffer.remaining();
+                        }
+                        return 0;
                     }
-                    buffer.put(buf);
-                    return readLen;
-                } else if (readIdx == 2) {
-                    // packet
-                    readIdx++;
-                    serializer.writeInt3(10);
-                    // NOTE: Bad packet seq
-                    serializer.writeInt1(0);
-
-                    buffer.put(serializer.toArray());
-                    return 4;
-                } else if (readIdx == 3) {
-                    readIdx++;
-                    byte[] buf = new byte[buffer.remaining()];
-                    for (int i = 0; i < buffer.remaining(); ++i) {
-                        buf[i] = (byte) ('a' + (i % 26));
-
-                    }
-                    buffer.put(buf);
-                    return buffer.remaining();
-                }
-                return 0;
+                };
             }
-        }).anyTimes();
-        EasyMock.replay(channel);
+        };
 
         MysqlChannel channel1 = new MysqlChannel(channel);
 
@@ -196,8 +215,13 @@ public class MysqlChannelTest {
     @Test(expected = IOException.class)
     public void testException() throws IOException {
         // mock
-        
EasyMock.expect(channel.read(EasyMock.anyObject(ByteBuffer.class))).andThrow(new
 IOException()).anyTimes();
-        EasyMock.replay(channel);
+        new Expectations() {
+            {
+                channel.read((ByteBuffer) any);
+                minTimes = 0;
+                result = new IOException();
+            }
+        };
 
         MysqlChannel channel1 = new MysqlChannel(channel);
 
@@ -208,16 +232,21 @@ public class MysqlChannelTest {
     @Test
     public void testSend() throws IOException {
         // mock
-        
EasyMock.expect(channel.write(EasyMock.anyObject(ByteBuffer.class))).andDelegateTo(new
 WrapperSocketChannel() {
-                    @Override
-                    public int write(ByteBuffer buffer) {
+        new Expectations() {
+            {
+                channel.write((ByteBuffer) any);
+                minTimes = 0;
+                result = new Delegate() {
+                    int fakeWrite(ByteBuffer buffer) {
                         int writeLen = 0;
                         writeLen += buffer.remaining();
                         buffer.position(buffer.limit());
                         return writeLen;
                     }
-                }).anyTimes();
-        EasyMock.replay(channel);
+                };
+            }
+        };
+
         MysqlChannel channel1 = new MysqlChannel(channel);
         ByteBuffer buf = ByteBuffer.allocate(1000);
         channel1.sendOnePacket(buf);
@@ -229,8 +258,13 @@ public class MysqlChannelTest {
     @Test(expected = IOException.class)
     public void testSendException() throws IOException {
         // mock
-        
EasyMock.expect(channel.write(EasyMock.anyObject(ByteBuffer.class))).andThrow(new
 IOException()).anyTimes();
-        EasyMock.replay(channel);
+        new Expectations() {
+            {
+                channel.write((ByteBuffer) any);
+                minTimes = 0;
+                result = new IOException();
+            }
+        };
         MysqlChannel channel1 = new MysqlChannel(channel);
         ByteBuffer buf = ByteBuffer.allocate(1000);
         channel1.sendOnePacket(buf);
@@ -242,17 +276,20 @@ public class MysqlChannelTest {
     @Test(expected = IOException.class)
     public void testSendFail() throws IOException {
         // mock
-        
EasyMock.expect(channel.write(EasyMock.anyObject(ByteBuffer.class))).andDelegateTo(new
 WrapperSocketChannel() {
-                    @Override
-                    public int write(ByteBuffer buffer) {
+        new Expectations() {
+            {
+                channel.write((ByteBuffer) any);
+                minTimes = 0;
+                result = new Delegate() {
+                    int fakeWrite(ByteBuffer buffer) {
                         int writeLen = 0;
                         writeLen += buffer.remaining();
                         buffer.position(buffer.limit());
                         return writeLen - 1;
                     }
-
-                }).anyTimes();
-        EasyMock.replay(channel);
+                };
+            }
+        };
         MysqlChannel channel1 = new MysqlChannel(channel);
         ByteBuffer buf = ByteBuffer.allocate(1000);
         channel1.sendAndFlush(buf);
diff --git 
a/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java 
b/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java
index 034734c..86ea229 100644
--- a/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java
+++ b/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java
@@ -18,34 +18,35 @@
 package org.apache.doris.mysql;
 
 import com.google.common.primitives.Bytes;
+import mockit.Expectations;
+import mockit.Mocked;
 import org.junit.Assert;
-import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
 import java.nio.ByteBuffer;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({ "org.apache.log4j.*", "javax.management.*" })
-@PrepareForTest({MysqlPassword.class})
 public class MysqlHandshakePacketTest {
     private byte[] buf;
     private MysqlCapability capability;
 
+    @Mocked
+    MysqlPassword mysqlPassword;
+
     @Before
     public void setUp() {
         buf = new byte[20];
         for (int i = 0; i < 20; ++i) {
             buf[i] = (byte) ('a' + i);
         }
-        PowerMock.mockStatic(MysqlPassword.class);
-        
EasyMock.expect(MysqlPassword.createRandomString(20)).andReturn(buf).anyTimes();
-        PowerMock.replay(MysqlPassword.class);
+
+        new Expectations() {
+            {
+                MysqlPassword.createRandomString(20);
+                minTimes = 0;
+                result = buf;
+            }
+        };
 
         capability = new MysqlCapability(0);
     }
diff --git a/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java 
b/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java
index 90bcc29..eddc4c4 100644
--- a/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java
+++ b/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java
@@ -17,87 +17,101 @@
 
 package org.apache.doris.mysql;
 
+import mockit.Delegate;
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.mysql.privilege.PaloAuth;
 import org.apache.doris.mysql.privilege.PrivPredicate;
-import org.apache.doris.mysql.privilege.UserPropertyMgr;
 import org.apache.doris.qe.ConnectContext;
 
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.slf4j.Logger;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.nio.ByteBuffer;
-import java.nio.channels.SocketChannel;
 import java.util.List;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({ "org.apache.log4j.*", "javax.management.*" })
-@PrepareForTest({Catalog.class, ConnectContext.class, MysqlPassword.class, 
UserPropertyMgr.class})
 public class MysqlProtoTest {
     private static final Logger LOG = 
org.slf4j.LoggerFactory.getLogger(MysqlProtoTest.class);
+    @Mocked
     private MysqlChannel channel;
-
+    @Mocked
+    private MysqlPassword password;
+    @Mocked
     private Catalog catalog;
+    @Mocked
+    private PaloAuth auth;
 
     @Before
     public void setUp() throws DdlException {
 
         // mock auth
-        PaloAuth auth = EasyMock.createMock(PaloAuth.class);
-        
EasyMock.expect(auth.checkGlobalPriv(EasyMock.anyObject(ConnectContext.class),
-                
EasyMock.anyObject(PrivPredicate.class))).andReturn(true).anyTimes();
-
-        EasyMock.expect(auth.checkPassword(EasyMock.anyString(), 
EasyMock.anyString(), (byte[]) EasyMock.anyObject(),
-                (byte[]) EasyMock.anyObject(), (List<UserIdentity>) 
EasyMock.anyObject())).andDelegateTo(
-                        new WrappedAuth() {
-                            @Override
-                            public boolean checkPassword(String remoteUser, 
String remoteHost, byte[] remotePasswd,
-                                    byte[] randomString,
-                                    List<UserIdentity> currentUser) {
-                                UserIdentity userIdentity = new 
UserIdentity("defaut_cluster:user", "192.168.1.1");
-                                currentUser.add(userIdentity);
-                                return true;
-                            }
-                        }).anyTimes();
-        EasyMock.replay(auth);
-
-        // Mock catalog
-        catalog = EasyMock.createMock(Catalog.class);
-        
EasyMock.expect(catalog.getDb(EasyMock.isA(String.class))).andReturn(new 
Database()).anyTimes();
-        EasyMock.expect(catalog.getAuth()).andReturn(auth).anyTimes();
-        PowerMock.mockStatic(Catalog.class);
-        EasyMock.expect(Catalog.getInstance()).andReturn(catalog).anyTimes();
-        
EasyMock.expect(Catalog.getCurrentCatalog()).andReturn(catalog).anyTimes();
-        catalog.changeDb(EasyMock.anyObject(ConnectContext.class), 
EasyMock.anyString());
-        EasyMock.expectLastCall().anyTimes();
-
-        EasyMock.replay(catalog);
-        PowerMock.replay(Catalog.class);
+        new Expectations() {
+            {
+                auth.checkGlobalPriv((ConnectContext) any, (PrivPredicate) 
any);
+                minTimes = 0;
+                result = true;
+
+                auth.checkPassword(anyString, anyString, (byte[]) any, 
(byte[]) any, (List<UserIdentity>) any);
+                minTimes = 0;
+                result = new Delegate() {
+                    boolean fakeCheckPassword(String remoteUser, String 
remoteHost, byte[] remotePasswd, byte[] randomString,
+                                              List<UserIdentity> currentUser) {
+                        UserIdentity userIdentity = new 
UserIdentity("defaut_cluster:user", "192.168.1.1");
+                        currentUser.add(userIdentity);
+                        return true;
+                    }
+                };
+
+                catalog.getDb(anyString);
+                minTimes = 0;
+                result = new Database();
+
+                catalog.getAuth();
+                minTimes = 0;
+                result = auth;
+
+                catalog.changeDb((ConnectContext) any, anyString);
+                minTimes = 0;
+            }
+        };
+
+        new Expectations(catalog) {
+            {
+                Catalog.getInstance();
+                minTimes = 0;
+                result = catalog;
+
+                Catalog.getCurrentCatalog();
+                minTimes = 0;
+                result = catalog;
+            }
+        };
+
     }
 
     private void mockChannel(String user, boolean sendOk) throws Exception {
         // mock channel
-        channel = EasyMock.createMock(MysqlChannel.class);
-        // channel.sendOnePacket(EasyMock.anyObject(ByteBuffer.class));
-        channel.sendAndFlush(EasyMock.anyObject(ByteBuffer.class));
-        if (sendOk) {
-            EasyMock.expectLastCall().anyTimes();
-        } else {
-            EasyMock.expectLastCall().andThrow(new IOException()).anyTimes();
-        }
+        new Expectations() {
+            {
+                channel.sendAndFlush((ByteBuffer) any);
+                minTimes = 0;
+                result = new Delegate() {
+                    void sendAndFlush(ByteBuffer packet) throws IOException {
+                        if (!sendOk) {
+                            throw new IOException();
+                        }
+                    }
+                };
+            }
+        };
 
         // mock auth packet
         MysqlSerializer serializer = MysqlSerializer.newInstance();
@@ -123,25 +137,36 @@ public class MysqlProtoTest {
         serializer.writeNulTerminateString("database");
 
         ByteBuffer buffer = serializer.toByteBuffer();
-        EasyMock.expect(channel.fetchOnePacket()).andReturn(buffer).anyTimes();
-        
EasyMock.expect(channel.getRemoteIp()).andReturn("192.168.1.1").anyTimes();
-        EasyMock.replay(channel);
-
-        PowerMock.expectNew(MysqlChannel.class, 
EasyMock.anyObject(SocketChannel.class)).andReturn(channel).anyTimes();
-        PowerMock.replay(MysqlChannel.class);
+        new Expectations() {
+            {
+                channel.fetchOnePacket();
+                minTimes = 0;
+                result = buffer;
+
+                channel.getRemoteIp();
+                minTimes = 0;
+                result = "192.168.1.1";
+            }
+        };
     }
 
-    private void mockPassword(boolean result) {
+    private void mockPassword(boolean res) {
         // mock password
-        PowerMock.mockStatic(MysqlPassword.class);
-        EasyMock.expect(MysqlPassword.checkScramble(
-                EasyMock.anyObject(byte[].class), 
EasyMock.anyObject(byte[].class),
-                EasyMock.anyObject(byte[].class)))
-                .andReturn(result).anyTimes();
-        EasyMock.expect(MysqlPassword.createRandomString(20)).andReturn(new 
byte[20]).anyTimes();
-        
EasyMock.expect(MysqlPassword.getSaltFromPassword(EasyMock.isA(byte[].class)))
-                .andReturn(new byte[20]).anyTimes();
-        PowerMock.replay(MysqlPassword.class);
+        new Expectations(password) {
+            {
+                MysqlPassword.checkScramble((byte[]) any, (byte[]) any, 
(byte[]) any);
+                minTimes = 0;
+                result = res;
+
+                MysqlPassword.createRandomString(20);
+                minTimes = 0;
+                result = new byte[20];
+
+                MysqlPassword.getSaltFromPassword((byte[]) any);
+                minTimes = 0;
+                result = new byte[20];
+            }
+        };
     }
 
     private void mockAccess() throws Exception {
diff --git a/fe/src/test/java/org/apache/doris/mysql/MysqlServerTest.java 
b/fe/src/test/java/org/apache/doris/mysql/MysqlServerTest.java
index e2c8440..ebe720c 100644
--- a/fe/src/test/java/org/apache/doris/mysql/MysqlServerTest.java
+++ b/fe/src/test/java/org/apache/doris/mysql/MysqlServerTest.java
@@ -17,12 +17,13 @@
 
 package org.apache.doris.mysql;
 
+import mockit.Delegate;
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.ConnectScheduler;
 
 import org.junit.Assert;
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
 import org.junit.Before;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -38,17 +39,20 @@ public class MysqlServerTest {
 
     private int submitNum;
     private int submitFailNum;
+    @Mocked
     private ConnectScheduler scheduler;
+    @Mocked
     private ConnectScheduler badScheduler;
 
     @Before
     public void setUp() {
         submitNum = 0;
         submitFailNum = 0;
-        scheduler = EasyMock.createMock(ConnectScheduler.class);
-        
EasyMock.expect(scheduler.submit(EasyMock.anyObject(ConnectContext.class)))
-                .andAnswer(new IAnswer<Boolean>() {
-                    @Override
+        new Expectations() {
+            {
+                scheduler.submit((ConnectContext) any);
+                minTimes = 0;
+                result = new Delegate() {
                     public Boolean answer() throws Throwable {
                         LOG.info("answer.");
                         synchronized (MysqlServerTest.this) {
@@ -56,13 +60,11 @@ public class MysqlServerTest {
                         }
                         return Boolean.TRUE;
                     }
-                }).anyTimes();
-        EasyMock.replay(scheduler);
+                };
 
-        badScheduler = EasyMock.createMock(ConnectScheduler.class);
-        
EasyMock.expect(badScheduler.submit(EasyMock.anyObject(ConnectContext.class)))
-                .andAnswer(new IAnswer<Boolean>() {
-                    @Override
+                badScheduler.submit((ConnectContext) any);
+                minTimes = 0;
+                result = new Delegate() {
                     public Boolean answer() throws Throwable {
                         LOG.info("answer.");
                         synchronized (MysqlServerTest.this) {
@@ -70,8 +72,9 @@ public class MysqlServerTest {
                         }
                         return Boolean.FALSE;
                     }
-                }).anyTimes();
-        EasyMock.replay(badScheduler);
+                };
+            }
+        };
     }
 
     @Test
diff --git a/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java 
b/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java
index 541f19b..0e822ba 100644
--- a/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java
+++ b/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.qe;
 
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.Reference;
@@ -28,46 +30,47 @@ import org.apache.doris.thrift.TScanRangeLocation;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore("org.apache.log4j.*")
-@PrepareForTest(Catalog.class)
 public class SimpleSchedulerTest {
     static Reference<Long> ref = new Reference<Long>();
 
+    @Mocked
     private Catalog catalog;
+    @Mocked
     private EditLog editLog;
 
     @Before
     public void setUp() {
-        editLog = EasyMock.createMock(EditLog.class);
-        editLog.logAddBackend(EasyMock.anyObject(Backend.class));
-        EasyMock.expectLastCall().anyTimes();
-        editLog.logDropBackend(EasyMock.anyObject(Backend.class));
-        EasyMock.expectLastCall().anyTimes();
-        editLog.logBackendStateChange(EasyMock.anyObject(Backend.class));
-        EasyMock.expectLastCall().anyTimes();
-        EasyMock.replay(editLog);
-
-        catalog = EasyMock.createMock(Catalog.class);
-        EasyMock.expect(catalog.getEditLog()).andReturn(editLog).anyTimes();
-        EasyMock.replay(catalog);
-
-        PowerMock.mockStatic(Catalog.class);
-        EasyMock.expect(Catalog.getInstance()).andReturn(catalog).anyTimes();
-        PowerMock.replay(Catalog.class);
+        new Expectations() {
+            {
+                editLog.logAddBackend((Backend) any);
+                minTimes = 0;
+
+                editLog.logDropBackend((Backend) any);
+                minTimes = 0;
+
+                editLog.logBackendStateChange((Backend) any);
+                minTimes = 0;
+
+                catalog.getEditLog();
+                minTimes = 0;
+                result = editLog;
+            }
+        };
+
+        new Expectations(catalog) {
+            {
+                Catalog.getInstance();
+                minTimes = 0;
+                result = catalog;
+            }
+        };
     }
 
     // TODO(lingbin): PALO-2051.
diff --git a/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java 
b/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java
index 392d6ce..d774a23 100644
--- a/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java
+++ b/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.task;
 
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.MaterializedIndex;
@@ -26,7 +28,6 @@ import org.apache.doris.catalog.Partition;
 import org.apache.doris.catalog.Tablet;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.util.UnitTestUtil;
-import org.apache.doris.load.DppConfig;
 import org.apache.doris.load.DppScheduler;
 import org.apache.doris.load.EtlStatus;
 import org.apache.doris.load.Load;
@@ -42,15 +43,9 @@ import org.apache.doris.thrift.TEtlState;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -58,9 +53,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ HadoopLoadEtlTask.class, Catalog.class })
-@PowerMockIgnore("javax.management.*")
 public class LoadEtlTaskTest {
     private long dbId;
     private long tableId;
@@ -70,8 +62,11 @@ public class LoadEtlTaskTest {
     private long backendId;
 
     private String label;
-    
+    @Mocked
     private Catalog catalog;
+    @Mocked
+    private EditLog editLog;
+    @Mocked
     private Load load;
     private Database db;
 
@@ -90,20 +85,28 @@ public class LoadEtlTaskTest {
     }
     
     @Test
-    public void testRunEtlTask() throws Exception {
+    public void testRunEtlTask(@Mocked DppScheduler dppScheduler) throws 
Exception {
         // mock catalog
         db = UnitTestUtil.createDb(dbId, tableId, paritionId, indexId, 
tabletId, backendId, 1L, 0L);
-        catalog = EasyMock.createNiceMock(Catalog.class);
-        EasyMock.expect(catalog.getDb(dbId)).andReturn(db).anyTimes();
-        
EasyMock.expect(catalog.getDb(db.getFullName())).andReturn(db).anyTimes();
-        // mock editLog
-        EditLog editLog = EasyMock.createMock(EditLog.class);
-        EasyMock.expect(catalog.getEditLog()).andReturn(editLog).anyTimes();
-        // mock static getInstance
-        PowerMock.mockStatic(Catalog.class);
-        EasyMock.expect(Catalog.getInstance()).andReturn(catalog).anyTimes();
-        PowerMock.replay(Catalog.class);
-        
+        new Expectations(catalog) {
+            {
+                catalog.getDb(dbId);
+                minTimes = 0;
+                result = db;
+
+                catalog.getDb(db.getFullName());
+                minTimes = 0;
+                result = db;
+
+                catalog.getEditLog();
+                minTimes = 0;
+                result = editLog;
+
+                Catalog.getInstance();
+                minTimes = 0;
+                result = catalog;
+            }
+        };
         // create job
         LoadJob job = new LoadJob(label);
         job.setState(JobState.ETL);
@@ -126,36 +129,52 @@ public class LoadEtlTaskTest {
         job.setIdToTableLoadInfo(idToTableLoadInfo);
 
         // mock load
-        load = EasyMock.createMock(Load.class);
-        
EasyMock.expect(load.addLoadingPartitions(EasyMock.isA(Set.class))).andReturn(true).times(1);
-        EasyMock.expect(load.updateLoadJobState(job, 
JobState.LOADING)).andReturn(true).times(1);
-        EasyMock.replay(load);
-        EasyMock.expect(catalog.getLoadInstance()).andReturn(load).times(1);
-        EasyMock.replay(catalog);
+        new Expectations() {
+            {
+                load.addLoadingPartitions((Set) any);
+                minTimes = 0;
+                result = true;
+
+                load.updateLoadJobState(job, JobState.LOADING);
+                times = 1;
+                result = true;
+
+                catalog.getLoadInstance();
+                times = 1;
+                result = load;
+            }
+        };
         
         // mock dppscheduler
-        DppScheduler dppScheduler = EasyMock.createMock(DppScheduler.class);
         EtlStatus runningStatus = new EtlStatus();
         runningStatus.setState(TEtlState.RUNNING);
         Map<String, String> stats = Maps.newHashMap();
         stats.put("map() completion", "1");
         stats.put("reduce() completion", "0.2");
         runningStatus.setStats(stats);
-        
EasyMock.expect(dppScheduler.getEtlJobStatus(EasyMock.anyString())).andReturn(runningStatus).times(1);
+
         EtlStatus finishedStatus = new EtlStatus();
         finishedStatus.setState(TEtlState.FINISHED);
         Map<String, String> counters = Maps.newHashMap();
         counters.put("dpp.norm.ALL", "100");
         counters.put("dpp.abnorm.ALL", "0");
         finishedStatus.setCounters(counters);
-        
EasyMock.expect(dppScheduler.getEtlJobStatus(EasyMock.anyString())).andReturn(finishedStatus).times(1);
+
         Map<String, Long> etlFiles = Maps.newHashMap();
         etlFiles.put("label_0.0.0.0", 1L);
-        
EasyMock.expect(dppScheduler.getEtlFiles(EasyMock.anyString())).andReturn(etlFiles).times(1);
-        EasyMock.replay(dppScheduler);
-        PowerMock.expectNew(DppScheduler.class, 
EasyMock.anyObject(DppConfig.class)).andReturn(dppScheduler).times(3);
-        PowerMock.replay(DppScheduler.class);
-        
+
+        new Expectations() {
+            {
+                dppScheduler.getEtlJobStatus(anyString);
+                times = 2;
+                returns(runningStatus, finishedStatus);
+
+                dppScheduler.getEtlFiles(anyString);
+                times = 1;
+                result = etlFiles;
+            }
+        };
+
         // test exec: running
         HadoopLoadEtlTask loadEtlTask = new HadoopLoadEtlTask(job);
         loadEtlTask.exec();
diff --git a/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java 
b/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java
index 1c15abc..b5b4410 100644
--- a/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java
+++ b/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.task;
 
+import mockit.Expectations;
+import mockit.Mocked;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.OlapTable;
@@ -36,23 +38,16 @@ import org.apache.doris.persist.EditLog;
 import org.apache.doris.thrift.TStatus;
 import org.apache.doris.thrift.TStatusCode;
 
-import org.easymock.EasyMock;
+import org.apache.doris.transaction.GlobalTransactionMgr;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ HadoopLoadPendingTask.class, Catalog.class })
-@PowerMockIgnore("javax.management.*")
 public class LoadPendingTaskTest {
     private long dbId;
     private long tableId;
@@ -62,9 +57,15 @@ public class LoadPendingTaskTest {
     private long backendId;
 
     private String label;
-    
+    @Mocked
     private Catalog catalog;
+    @Mocked
+    private EditLog editLog;
+    @Mocked
     private Load load;
+    @Mocked
+    private DppScheduler dppScheduler;
+
     private Database db;
 
     @Before
@@ -84,16 +85,34 @@ public class LoadPendingTaskTest {
     public void testRunPendingTask() throws Exception {
         // mock catalog
         db = UnitTestUtil.createDb(dbId, tableId, partitionId, indexId, 
tabletId, backendId, 1L, 0L);
-        catalog = EasyMock.createNiceMock(Catalog.class);
-        EasyMock.expect(catalog.getDb(dbId)).andReturn(db).anyTimes();
-        
EasyMock.expect(catalog.getDb(db.getFullName())).andReturn(db).anyTimes();
-        // mock editLog
-        EditLog editLog = EasyMock.createMock(EditLog.class);
-        EasyMock.expect(catalog.getEditLog()).andReturn(editLog).anyTimes();
-        // mock static getInstance
-        PowerMock.mockStatic(Catalog.class);
-        EasyMock.expect(Catalog.getInstance()).andReturn(catalog).anyTimes();
-        PowerMock.replay(Catalog.class);
+
+        GlobalTransactionMgr globalTransactionMgr = new 
GlobalTransactionMgr(catalog);
+        globalTransactionMgr.setEditLog(editLog);
+
+        // mock catalog
+        new Expectations(catalog) {
+            {
+                catalog.getDb(dbId);
+                minTimes = 0;
+                result = db;
+
+                catalog.getDb(db.getFullName());
+                minTimes = 0;
+                result = db;
+
+                catalog.getEditLog();
+                minTimes = 0;
+                result = editLog;
+
+                Catalog.getInstance();
+                minTimes = 0;
+                result = catalog;
+
+                Catalog.getCurrentGlobalTransactionMgr();
+                minTimes = 0;
+                result = globalTransactionMgr;
+            }
+        };
         
         // create job
         LoadJob job = new LoadJob(label);
@@ -103,6 +122,7 @@ public class LoadPendingTaskTest {
         job.setClusterInfo(cluster, Load.clusterToDppConfig.get(cluster));
         // set partition load infos
         OlapTable table = (OlapTable) db.getTable(tableId);
+        table.setBaseIndexId(0L);
         Partition partition = table.getPartition(partitionId);
         Source source = new Source(new ArrayList<String>());
         List<Source> sources = new ArrayList<Source>();
@@ -115,22 +135,36 @@ public class LoadPendingTaskTest {
         Map<Long, TableLoadInfo> idToTableLoadInfo = new HashMap<Long, 
TableLoadInfo>();
         idToTableLoadInfo.put(tableId, tableLoadInfo);
         job.setIdToTableLoadInfo(idToTableLoadInfo);
+        job.setTimeoutSecond(10);
 
-        // mock load
-        load = EasyMock.createMock(Load.class);
-        EasyMock.expect(load.updateLoadJobState(job, 
JobState.ETL)).andReturn(true).times(1);
-        EasyMock.expect(load.getLoadErrorHubInfo()).andReturn(null).times(1);
-        EasyMock.replay(load);
-        EasyMock.expect(catalog.getLoadInstance()).andReturn(load).times(1);
-        EasyMock.replay(catalog);
-        
-        // mock dppscheduler
-        DppScheduler dppScheduler = EasyMock.createMock(DppScheduler.class);
-        EasyMock.expect(dppScheduler.submitEtlJob(EasyMock.anyLong(), 
EasyMock.anyString(), EasyMock.anyString(),
-                                                  EasyMock.anyString(), 
EasyMock.isA(Map.class), EasyMock.anyInt()))
-                .andReturn(new EtlSubmitResult(new TStatus(TStatusCode.OK), 
"job_123456")).times(1);
-        EasyMock.replay(dppScheduler);
-        PowerMock.expectNew(DppScheduler.class, 
EasyMock.anyObject(DppConfig.class)).andReturn(dppScheduler).times(1);
-        PowerMock.replay(DppScheduler.class);
+        // mock
+        new Expectations() {
+            {
+                load.updateLoadJobState(job, JobState.ETL);
+                times = 1;
+                result = true;
+
+                load.getLoadErrorHubInfo();
+                times = 1;
+                result = null;
+
+                catalog.getLoadInstance();
+                times = 1;
+                result = load;
+
+                dppScheduler.submitEtlJob(anyLong, anyString, anyString, 
anyString, (Map) any, anyInt);
+                times = 1;
+                result = new EtlSubmitResult(new TStatus(TStatusCode.OK), 
"job_123456");
+
+                editLog.logSaveTransactionId(anyLong);
+                minTimes = 0;
+            }
+        };
+
+        HadoopLoadPendingTask loadPendingTask = new HadoopLoadPendingTask(job);
+        loadPendingTask.exec();
+
+        Assert.assertEquals(job.getId(), loadPendingTask.getSignature());
+        Assert.assertEquals(JobState.PENDING, job.getState());
     }
 }


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

Reply via email to