You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by je...@apache.org on 2018/08/06 02:42:09 UTC

[incubator-dubbo] branch master updated: add compatible class for config #2169 (#2170)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5de6c76  add compatible class for config #2169 (#2170)
5de6c76 is described below

commit 5de6c76f063195dabd037601c158c533d0356582
Author: Jerrick Zhu <di...@gmail.com>
AuthorDate: Mon Aug 6 10:41:51 2018 +0800

    add compatible class for config #2169 (#2170)
---
 dubbo-compatible/pom.xml                           |   6 +
 .../alibaba/dubbo/config/ApplicationConfig.java}   |  51 +++---
 .../com/alibaba/dubbo/config/ArgumentConfig.java}  |  43 ++---
 .../com/alibaba/dubbo/config/ConsumerConfig.java}  |  43 ++---
 .../com/alibaba/dubbo/config/MethodConfig.java}    |  44 ++---
 .../com/alibaba/dubbo/config/ModuleConfig.java}    |  50 +++---
 .../com/alibaba/dubbo/config/MonitorConfig.java}   |  49 +++---
 .../com/alibaba/dubbo/config/ProtocolConfig.java}  |  18 +-
 .../com/alibaba/dubbo/config/ReferenceConfig.java} |  16 +-
 .../com/alibaba/dubbo/config/RegistryConfig.java}  |  19 ++-
 .../com/alibaba/dubbo/config/ServiceConfig.java}   |  16 +-
 .../dubbo/{compatible => }/cache/CacheTest.java    |   2 +-
 .../dubbo/{compatible => }/cache/MyCache.java      |   2 +-
 .../{compatible => }/cache/MyCacheFactory.java     |   2 +-
 .../common/extension/ExtensionTest.java            |   4 +-
 .../common/extension/MyExtensionFactory.java       |   2 +-
 .../apache/dubbo/config/ApplicationConfigTest.java | 180 ++++++++++++++++++++
 .../apache/dubbo/config/ArgumentConfigTest.java    |  65 +++++++
 .../java/org/apache/dubbo/config/ConfigTest.java   |  56 ++++++
 .../apache/dubbo/config/ConsumerConfigTest.java    |  55 ++++++
 .../org/apache/dubbo/config/MethodConfigTest.java  | 184 ++++++++++++++++++++
 .../org/apache/dubbo/config/ModuleConfigTest.java  | 113 +++++++++++++
 .../apache/dubbo/config/ProtocolConfigTest.java    | 157 +++++++++++++++++
 .../apache/dubbo/config/ProviderConfigTest.java    | 187 +++++++++++++++++++++
 .../apache/dubbo/config/ReferenceConfigTest.java   |  65 +++++++
 .../apache/dubbo/config/RegistryConfigTest.java    | 175 +++++++++++++++++++
 .../{compatible => }/echo/EchoServiceTest.java     |   7 +-
 .../dubbo/{compatible => }/filter/FilterTest.java  |   5 +-
 .../dubbo/{compatible => }/filter/MyFilter.java    |   2 +-
 .../dubbo/{compatible => }/filter/MyInvoker.java   |   4 +-
 .../generic/GenericServiceTest.java                |   7 +-
 .../serialization/MyObjectInput.java               |   2 +-
 .../serialization/MyObjectOutput.java              |   2 +-
 .../serialization/MySerialization.java             |   2 +-
 .../serialization/SerializationTest.java           |   2 +-
 .../{compatible => }/service/CustomArgument.java   |   2 +-
 .../{compatible => }/service/DemoService.java      |   2 +-
 .../{compatible => }/service/DemoServiceImpl.java  |   2 +-
 .../{compatible => }/service/MockInvocation.java   |   2 +-
 .../dubbo/{compatible => }/service/Person.java     |   2 +-
 .../dubbo/{compatible => }/service/Type.java       |   2 +-
 ...alibaba.dubbo.common.extension.ExtensionFactory |   2 +-
 42 files changed, 1470 insertions(+), 181 deletions(-)

diff --git a/dubbo-compatible/pom.xml b/dubbo-compatible/pom.xml
index b99da06..1da947f 100644
--- a/dubbo-compatible/pom.xml
+++ b/dubbo-compatible/pom.xml
@@ -73,5 +73,11 @@
             <version>${project.parent.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-registry-multicast</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ApplicationConfig.java
similarity index 75%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ApplicationConfig.java
index e6bcf4c..f17e7ed 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ApplicationConfig.java
@@ -1,21 +1,30 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.compatible.service;
-
-public enum Type {
-    High, Normal, Lower
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.dubbo.config;
+
+@Deprecated
+public class ApplicationConfig extends org.apache.dubbo.config.ApplicationConfig {
+
+    public ApplicationConfig() {
+        super();
+    }
+
+    public ApplicationConfig(String name) {
+        super(name);
+    }
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ArgumentConfig.java
similarity index 86%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ArgumentConfig.java
index e6bcf4c..2ba33bb 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ArgumentConfig.java
@@ -1,21 +1,22 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.compatible.service;
-
-public enum Type {
-    High, Normal, Lower
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.dubbo.config;
+
+@Deprecated
+public class ArgumentConfig extends org.apache.dubbo.config.ArgumentConfig {
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ConsumerConfig.java
similarity index 86%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ConsumerConfig.java
index e6bcf4c..320ec47 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ConsumerConfig.java
@@ -1,21 +1,22 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.compatible.service;
-
-public enum Type {
-    High, Normal, Lower
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.dubbo.config;
+
+@Deprecated
+public class ConsumerConfig extends org.apache.dubbo.config.ConsumerConfig {
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/MethodConfig.java
similarity index 86%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/MethodConfig.java
index e6bcf4c..c3d13e9 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/MethodConfig.java
@@ -1,21 +1,23 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.compatible.service;
-
-public enum Type {
-    High, Normal, Lower
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.dubbo.config;
+
+@Deprecated
+public class MethodConfig extends org.apache.dubbo.config.MethodConfig {
+
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ModuleConfig.java
similarity index 78%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ModuleConfig.java
index e6bcf4c..8b75279 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ModuleConfig.java
@@ -1,21 +1,29 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.compatible.service;
-
-public enum Type {
-    High, Normal, Lower
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.dubbo.config;
+
+@Deprecated
+public class ModuleConfig extends org.apache.dubbo.config.ModuleConfig {
+
+    public ModuleConfig() {
+    }
+
+    public ModuleConfig(String name) {
+        super(name);
+    }
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/MonitorConfig.java
similarity index 77%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/MonitorConfig.java
index e6bcf4c..0c5d175 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/MonitorConfig.java
@@ -1,21 +1,28 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.compatible.service;
-
-public enum Type {
-    High, Normal, Lower
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.dubbo.config;
+
+@Deprecated
+public class MonitorConfig extends org.apache.dubbo.config.MonitorConfig {
+    public MonitorConfig() {
+    }
+
+    public MonitorConfig(String address) {
+        super(address);
+    }
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java
similarity index 72%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java
index bf098b6..0835ef0 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java
@@ -14,14 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.common.extension;
 
-import com.alibaba.dubbo.common.extension.ExtensionFactory;
+package com.alibaba.dubbo.config;
 
-public class MyExtensionFactory implements ExtensionFactory {
+@Deprecated
+public class ProtocolConfig extends org.apache.dubbo.config.ProtocolConfig {
 
-    @Override
-    public <T> T getExtension(Class<T> type, String name) {
-        return null;
+    public ProtocolConfig() {
+    }
+
+    public ProtocolConfig(String name) {
+        super(name);
+    }
+
+    public ProtocolConfig(String name, int port) {
+        super(name, port);
     }
 }
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
similarity index 73%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
index bf098b6..026fe4e 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
@@ -14,14 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.common.extension;
 
-import com.alibaba.dubbo.common.extension.ExtensionFactory;
+package com.alibaba.dubbo.config;
 
-public class MyExtensionFactory implements ExtensionFactory {
+import org.apache.dubbo.config.annotation.Reference;
 
-    @Override
-    public <T> T getExtension(Class<T> type, String name) {
-        return null;
+@Deprecated
+public class ReferenceConfig<T> extends org.apache.dubbo.config.ReferenceConfig<T> {
+
+    public ReferenceConfig() {
+    }
+
+    public ReferenceConfig(Reference reference) {
+        super(reference);
     }
 }
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCacheFactory.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/RegistryConfig.java
similarity index 71%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCacheFactory.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/RegistryConfig.java
index ed55493..501f918 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCacheFactory.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/RegistryConfig.java
@@ -15,16 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.cache;
+package com.alibaba.dubbo.config;
 
-import com.alibaba.dubbo.cache.Cache;
-import com.alibaba.dubbo.cache.support.AbstractCacheFactory;
-import com.alibaba.dubbo.common.URL;
+@Deprecated
+public class RegistryConfig extends org.apache.dubbo.config.RegistryConfig {
 
-public class MyCacheFactory extends AbstractCacheFactory {
+    public RegistryConfig() {
+    }
+
+    public RegistryConfig(String address) {
+        super(address);
+    }
 
-    @Override
-    protected Cache createCache(URL url) {
-        return new MyCache(url);
+    public RegistryConfig(String address, String protocol) {
+        super(address, protocol);
     }
 }
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
similarity index 74%
copy from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
copy to dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
index bf098b6..f0f22d7 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
@@ -14,14 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.common.extension;
 
-import com.alibaba.dubbo.common.extension.ExtensionFactory;
+package com.alibaba.dubbo.config;
 
-public class MyExtensionFactory implements ExtensionFactory {
+import org.apache.dubbo.config.annotation.Service;
 
-    @Override
-    public <T> T getExtension(Class<T> type, String name) {
-        return null;
+@Deprecated
+public class ServiceConfig<T> extends org.apache.dubbo.config.ServiceConfig<T> {
+
+    public ServiceConfig() {
+    }
+
+    public ServiceConfig(Service service) {
+        super(service);
     }
 }
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/CacheTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/cache/CacheTest.java
similarity index 98%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/CacheTest.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/cache/CacheTest.java
index 175d907..6ff4d8b 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/CacheTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/cache/CacheTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.cache;
+package org.apache.dubbo.cache;
 
 import com.alibaba.dubbo.cache.Cache;
 import com.alibaba.dubbo.cache.CacheFactory;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCache.java b/dubbo-compatible/src/test/java/org/apache/dubbo/cache/MyCache.java
similarity index 96%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCache.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/cache/MyCache.java
index f9e6ce2..c7a7528 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCache.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/cache/MyCache.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.cache;
+package org.apache.dubbo.cache;
 
 import com.alibaba.dubbo.cache.Cache;
 import com.alibaba.dubbo.common.URL;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCacheFactory.java b/dubbo-compatible/src/test/java/org/apache/dubbo/cache/MyCacheFactory.java
similarity index 96%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCacheFactory.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/cache/MyCacheFactory.java
index ed55493..aa22fbe 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/cache/MyCacheFactory.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/cache/MyCacheFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.cache;
+package org.apache.dubbo.cache;
 
 import com.alibaba.dubbo.cache.Cache;
 import com.alibaba.dubbo.cache.support.AbstractCacheFactory;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/ExtensionTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/ExtensionTest.java
similarity index 91%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/ExtensionTest.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/ExtensionTest.java
index 588446e..1243827 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/ExtensionTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/ExtensionTest.java
@@ -15,10 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.common.extension;
+package org.apache.dubbo.common.extension;
 
-import org.apache.dubbo.common.extension.ExtensionFactory;
-import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java
similarity index 95%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java
index bf098b6..f9602b4 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/common/extension/MyExtensionFactory.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.common.extension;
+package org.apache.dubbo.common.extension;
 
 import com.alibaba.dubbo.common.extension.ExtensionFactory;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
new file mode 100644
index 0000000..fe4c2ff
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
@@ -0,0 +1,180 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.config.ApplicationConfig;
+import com.alibaba.dubbo.config.MonitorConfig;
+import com.alibaba.dubbo.config.RegistryConfig;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.sameInstance;
+import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
+import static org.junit.Assert.assertThat;
+
+public class ApplicationConfigTest {
+    @Test
+    public void testName() throws Exception {
+        ApplicationConfig application = new ApplicationConfig();
+        application.setName("app");
+        assertThat(application.getName(), equalTo("app"));
+        application = new ApplicationConfig("app2");
+        assertThat(application.getName(), equalTo("app2"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        ApplicationConfig.appendParameters(parameters, application);
+        assertThat(parameters, hasEntry(Constants.APPLICATION_KEY, "app2"));
+    }
+
+    @Test
+    public void testVersion() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setVersion("1.0.0");
+        assertThat(application.getVersion(), equalTo("1.0.0"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        ApplicationConfig.appendParameters(parameters, application);
+        assertThat(parameters, hasEntry("application.version", "1.0.0"));
+    }
+
+    @Test
+    public void testOwner() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setOwner("owner");
+        assertThat(application.getOwner(), equalTo("owner"));
+    }
+
+    @Test
+    public void testOrganization() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setOrganization("org");
+        assertThat(application.getOrganization(), equalTo("org"));
+    }
+
+    @Test
+    public void testArchitecture() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setArchitecture("arch");
+        assertThat(application.getArchitecture(), equalTo("arch"));
+    }
+
+    @Test
+    public void testEnvironment1() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setEnvironment("develop");
+        assertThat(application.getEnvironment(), equalTo("develop"));
+        application.setEnvironment("test");
+        assertThat(application.getEnvironment(), equalTo("test"));
+        application.setEnvironment("product");
+        assertThat(application.getEnvironment(), equalTo("product"));
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testEnvironment2() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setEnvironment("illegal-env");
+    }
+
+    @Test
+    public void testRegistry() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        RegistryConfig registry = new RegistryConfig();
+        application.setRegistry(registry);
+        assertThat(application.getRegistry(), sameInstance(registry));
+        application.setRegistries(Collections.singletonList(registry));
+        assertThat(application.getRegistries(), contains(registry));
+        assertThat(application.getRegistries(), hasSize(1));
+    }
+
+    @Test
+    public void testMonitor() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setMonitor(new MonitorConfig("monitor-addr"));
+        assertThat(application.getMonitor().getAddress(), equalTo("monitor-addr"));
+        application.setMonitor("monitor-addr");
+        assertThat(application.getMonitor().getAddress(), equalTo("monitor-addr"));
+    }
+
+    @Test
+    public void testLogger() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setLogger("log4j");
+        assertThat(application.getLogger(), equalTo("log4j"));
+    }
+
+    @Test
+    public void testDefault() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setDefault(true);
+        assertThat(application.isDefault(), is(true));
+    }
+
+    @Test
+    public void testDumpDirectory() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setDumpDirectory("/dump");
+        assertThat(application.getDumpDirectory(), equalTo("/dump"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        ApplicationConfig.appendParameters(parameters, application);
+        assertThat(parameters, hasEntry(Constants.DUMP_DIRECTORY, "/dump"));
+    }
+
+    @Test
+    public void testQosEnable() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setQosEnable(true);
+        assertThat(application.getQosEnable(), is(true));
+        Map<String, String> parameters = new HashMap<String, String>();
+        ApplicationConfig.appendParameters(parameters, application);
+        assertThat(parameters, hasEntry(Constants.QOS_ENABLE, "true"));
+    }
+
+    @Test
+    public void testQosPort() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setQosPort(8080);
+        assertThat(application.getQosPort(), equalTo(8080));
+    }
+
+    @Test
+    public void testQosAcceptForeignIp() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setQosAcceptForeignIp(true);
+        assertThat(application.getQosAcceptForeignIp(), is(true));
+        Map<String, String> parameters = new HashMap<String, String>();
+        ApplicationConfig.appendParameters(parameters, application);
+        assertThat(parameters, hasEntry(Constants.ACCEPT_FOREIGN_IP, "true"));
+    }
+
+    @Test
+    public void testParameters() throws Exception {
+        ApplicationConfig application = new ApplicationConfig("app");
+        application.setQosAcceptForeignIp(true);
+        Map<String, String> parameters = new HashMap<String, String>();
+        parameters.put("k1", "v1");
+        ApplicationConfig.appendParameters(parameters, application);
+        assertThat(parameters, hasEntry("k1", "v1"));
+        assertThat(parameters, hasEntry(Constants.ACCEPT_FOREIGN_IP, "true"));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ArgumentConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
new file mode 100644
index 0000000..2f73c51
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.dubbo.config.ArgumentConfig;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ArgumentConfigTest {
+    @Test
+    public void testIndex() throws Exception {
+        ArgumentConfig argument = new ArgumentConfig();
+        argument.setIndex(1);
+        assertThat(argument.getIndex(), is(1));
+    }
+
+    @Test
+    public void testType() throws Exception {
+        ArgumentConfig argument = new ArgumentConfig();
+        argument.setType("int");
+        assertThat(argument.getType(), equalTo("int"));
+    }
+
+    @Test
+    public void testCallback() throws Exception {
+        ArgumentConfig argument = new ArgumentConfig();
+        argument.setCallback(true);
+        assertThat(argument.isCallback(), is(true));
+    }
+
+    @Test
+    public void testArguments() throws Exception {
+        ArgumentConfig argument = new ArgumentConfig();
+        argument.setIndex(1);
+        argument.setType("int");
+        argument.setCallback(true);
+        Map<String, String> parameters = new HashMap<String, String>();
+        AbstractServiceConfig.appendParameters(parameters, argument);
+        assertThat(parameters, hasEntry("callback", "true"));
+        assertThat(parameters.size(), is(1));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ConfigTest.java
new file mode 100644
index 0000000..2e57fec
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ConfigTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import org.apache.dubbo.service.DemoService;
+import org.apache.dubbo.service.DemoServiceImpl;
+
+import com.alibaba.dubbo.config.ApplicationConfig;
+import com.alibaba.dubbo.config.ReferenceConfig;
+import com.alibaba.dubbo.config.RegistryConfig;
+import com.alibaba.dubbo.config.ServiceConfig;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ConfigTest {
+
+    @Before
+    public void setup() {
+        // In IDE env, make sure adding the following argument to VM options
+        System.setProperty("java.net.preferIPv4Stack", "true");
+    }
+
+    @Test
+    public void testConfig() {
+        com.alibaba.dubbo.config.ServiceConfig<DemoService> service = new ServiceConfig<>();
+        service.setApplication(new com.alibaba.dubbo.config.ApplicationConfig("first-dubbo-provider"));
+        service.setRegistry(new com.alibaba.dubbo.config.RegistryConfig("multicast://224.5.6.7:1234"));
+        service.setInterface(DemoService.class);
+        service.setRef(new DemoServiceImpl());
+        service.export();
+
+        com.alibaba.dubbo.config.ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
+        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
+        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
+        reference.setInterface(DemoService.class);
+        DemoService demoService = reference.get();
+        String message = demoService.sayHello("dubbo");
+        Assert.assertEquals("hello dubbo", message);
+    }
+}
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
new file mode 100644
index 0000000..2b08c79
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import org.junit.Test;
+
+import com.alibaba.dubbo.config.ConsumerConfig;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ConsumerConfigTest {
+    @Test
+    public void testTimeout() throws Exception {
+        try {
+            System.clearProperty("sun.rmi.transport.tcp.responseTimeout");
+            ConsumerConfig consumer = new ConsumerConfig();
+            consumer.setTimeout(10);
+            assertThat(consumer.getTimeout(), is(10));
+            assertThat(System.getProperty("sun.rmi.transport.tcp.responseTimeout"), equalTo("10"));
+        } finally {
+            System.clearProperty("sun.rmi.transport.tcp.responseTimeout");
+        }
+    }
+
+    @Test
+    public void testDefault() throws Exception {
+        ConsumerConfig consumer = new ConsumerConfig();
+        consumer.setDefault(true);
+        assertThat(consumer.isDefault(), is(true));
+    }
+
+    @Test
+    public void testClient() throws Exception {
+        ConsumerConfig consumer = new ConsumerConfig();
+        consumer.setClient("client");
+        assertThat(consumer.getClient(), equalTo("client"));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/MethodConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/MethodConfigTest.java
new file mode 100644
index 0000000..a7c5e99
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/MethodConfigTest.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.config.MethodConfig;
+import com.alibaba.dubbo.config.ArgumentConfig;
+import org.hamcrest.Matchers;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.hasKey;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertThat;
+
+public class MethodConfigTest {
+    @Test
+    public void testName() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setName("hello");
+        assertThat(method.getName(), equalTo("hello"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        MethodConfig.appendParameters(parameters, method);
+        assertThat(parameters, not(hasKey("name")));
+    }
+
+    @Test
+    public void testStat() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setStat(10);
+        assertThat(method.getStat(), equalTo(10));
+    }
+
+    @Test
+    public void testRetry() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setRetry(true);
+        assertThat(method.isRetry(), is(true));
+    }
+
+    @Test
+    public void testReliable() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setReliable(true);
+        assertThat(method.isReliable(), is(true));
+    }
+
+    @Test
+    public void testExecutes() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setExecutes(10);
+        assertThat(method.getExecutes(), equalTo(10));
+    }
+
+    @Test
+    public void testDeprecated() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setDeprecated(true);
+        assertThat(method.getDeprecated(), is(true));
+    }
+
+    @Test
+    public void testArguments() throws Exception {
+        MethodConfig method = new MethodConfig();
+        ArgumentConfig argument = new ArgumentConfig();
+        method.setArguments(Collections.singletonList(argument));
+        assertThat(method.getArguments(), contains(argument));
+        assertThat(method.getArguments(), Matchers.<org.apache.dubbo.config.ArgumentConfig>hasSize(1));
+    }
+
+    @Test
+    public void testSticky() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setSticky(true);
+        assertThat(method.getSticky(), is(true));
+    }
+
+    @Test
+    public void testOnreturn() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setOnreturn("on-return-object");
+        assertThat(method.getOnreturn(), equalTo((Object) "on-return-object"));
+        Map<Object, Object> attribute = new HashMap<Object, Object>();
+        MethodConfig.appendAttributes(attribute, method);
+        assertThat(attribute, hasEntry((Object) Constants.ON_RETURN_INSTANCE_KEY, (Object) "on-return-object"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        MethodConfig.appendParameters(parameters, method);
+        assertThat(parameters.size(), is(0));
+    }
+
+    @Test
+    public void testOnreturnMethod() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setOnreturnMethod("on-return-method");
+        assertThat(method.getOnreturnMethod(), equalTo("on-return-method"));
+        Map<Object, Object> attribute = new HashMap<Object, Object>();
+        MethodConfig.appendAttributes(attribute, method);
+        assertThat(attribute, hasEntry((Object) Constants.ON_RETURN_METHOD_KEY, (Object) "on-return-method"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        MethodConfig.appendParameters(parameters, method);
+        assertThat(parameters.size(), is(0));
+    }
+
+    @Test
+    public void testOnthrow() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setOnthrow("on-throw-object");
+        assertThat(method.getOnthrow(), equalTo((Object) "on-throw-object"));
+        Map<Object, Object> attribute = new HashMap<Object, Object>();
+        MethodConfig.appendAttributes(attribute, method);
+        assertThat(attribute, hasEntry((Object) Constants.ON_THROW_INSTANCE_KEY, (Object) "on-throw-object"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        MethodConfig.appendParameters(parameters, method);
+        assertThat(parameters.size(), is(0));
+    }
+
+    @Test
+    public void testOnthrowMethod() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setOnthrowMethod("on-throw-method");
+        assertThat(method.getOnthrowMethod(), equalTo("on-throw-method"));
+        Map<Object, Object> attribute = new HashMap<Object, Object>();
+        MethodConfig.appendAttributes(attribute, method);
+        assertThat(attribute, hasEntry((Object) Constants.ON_THROW_METHOD_KEY, (Object) "on-throw-method"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        MethodConfig.appendParameters(parameters, method);
+        assertThat(parameters.size(), is(0));
+    }
+
+    @Test
+    public void testOninvoke() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setOninvoke("on-invoke-object");
+        assertThat(method.getOninvoke(), equalTo((Object) "on-invoke-object"));
+        Map<Object, Object> attribute = new HashMap<Object, Object>();
+        MethodConfig.appendAttributes(attribute, method);
+        assertThat(attribute, hasEntry((Object) Constants.ON_INVOKE_INSTANCE_KEY, (Object) "on-invoke-object"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        MethodConfig.appendParameters(parameters, method);
+        assertThat(parameters.size(), is(0));
+    }
+
+    @Test
+    public void testOninvokeMethod() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setOninvokeMethod("on-invoke-method");
+        assertThat(method.getOninvokeMethod(), equalTo("on-invoke-method"));
+        Map<Object, Object> attribute = new HashMap<Object, Object>();
+        MethodConfig.appendAttributes(attribute, method);
+        assertThat(attribute, hasEntry((Object) Constants.ON_INVOKE_METHOD_KEY, (Object) "on-invoke-method"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        MethodConfig.appendParameters(parameters, method);
+        assertThat(parameters.size(), is(0));
+    }
+
+    @Test
+    public void testReturn() throws Exception {
+        MethodConfig method = new MethodConfig();
+        method.setReturn(true);
+        assertThat(method.isReturn(), is(true));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ModuleConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ModuleConfigTest.java
new file mode 100644
index 0000000..5dc9701
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ModuleConfigTest.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import com.alibaba.dubbo.config.ModuleConfig;
+import com.alibaba.dubbo.config.RegistryConfig;
+
+import org.hamcrest.Matchers;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.sameInstance;
+import static org.junit.Assert.assertThat;
+
+public class ModuleConfigTest {
+    @Test(expected = IllegalStateException.class)
+    public void testName1() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        Map<String, String> parameters = new HashMap<String, String>();
+        ModuleConfig.appendParameters(parameters, module);
+    }
+
+    @Test
+    public void testName2() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        module.setName("module-name");
+        assertThat(module.getName(), equalTo("module-name"));
+        assertThat(module.getId(), equalTo("module-name"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        ModuleConfig.appendParameters(parameters, module);
+        assertThat(parameters, hasEntry("module", "module-name"));
+    }
+
+    @Test
+    public void testVersion() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        module.setName("module-name");
+        module.setVersion("1.0.0");
+        assertThat(module.getVersion(), equalTo("1.0.0"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        ModuleConfig.appendParameters(parameters, module);
+        assertThat(parameters, hasEntry("module.version", "1.0.0"));
+    }
+
+    @Test
+    public void testOwner() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        module.setOwner("owner");
+        assertThat(module.getOwner(), equalTo("owner"));
+    }
+
+    @Test
+    public void testOrganization() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        module.setOrganization("org");
+        assertThat(module.getOrganization(), equalTo("org"));
+    }
+
+    @Test
+    public void testRegistry() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        RegistryConfig registry = new RegistryConfig();
+        module.setRegistry(registry);
+        assertThat(module.getRegistry(), sameInstance(registry));
+    }
+
+    @Test
+    public void testRegistries() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        RegistryConfig registry = new RegistryConfig();
+        module.setRegistries(Collections.singletonList(registry));
+        assertThat(module.getRegistries(), Matchers.<org.apache.dubbo.config.RegistryConfig>hasSize(1));
+        assertThat(module.getRegistries(), contains(registry));
+    }
+
+    @Test
+    public void testMonitor() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        module.setMonitor("monitor-addr1");
+        assertThat(module.getMonitor().getAddress(), equalTo("monitor-addr1"));
+        module.setMonitor(new MonitorConfig("monitor-addr2"));
+        assertThat(module.getMonitor().getAddress(), equalTo("monitor-addr2"));
+    }
+
+    @Test
+    public void testDefault() throws Exception {
+        ModuleConfig module = new ModuleConfig();
+        module.setDefault(true);
+        assertThat(module.isDefault(), is(true));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
new file mode 100644
index 0000000..48de8a1
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.config.ProtocolConfig;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ProtocolConfigTest {
+
+    @Test
+    public void testName() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setName("name");
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProtocolConfig.appendParameters(parameters, protocol);
+        assertThat(protocol.getName(), equalTo("name"));
+        assertThat(protocol.getId(), equalTo("name"));
+        assertThat(parameters.isEmpty(), is(true));
+    }
+
+    @Test
+    public void testHost() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setHost("host");
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProtocolConfig.appendParameters(parameters, protocol);
+        assertThat(protocol.getHost(), equalTo("host"));
+        assertThat(parameters.isEmpty(), is(true));
+    }
+
+    @Test
+    public void testPort() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setPort(8080);
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProtocolConfig.appendParameters(parameters, protocol);
+        assertThat(protocol.getPort(), equalTo(8080));
+        assertThat(parameters.isEmpty(), is(true));
+    }
+
+    @Test
+    public void testPath() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setContextpath("context-path");
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProtocolConfig.appendParameters(parameters, protocol);
+        assertThat(protocol.getPath(), equalTo("context-path"));
+        assertThat(protocol.getContextpath(), equalTo("context-path"));
+        assertThat(parameters.isEmpty(), is(true));
+        protocol.setPath("path");
+        assertThat(protocol.getPath(), equalTo("path"));
+        assertThat(protocol.getContextpath(), equalTo("path"));
+    }
+
+    @Test
+    public void testThreads() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setThreads(10);
+        assertThat(protocol.getThreads(), is(10));
+    }
+
+    @Test
+    public void testIothreads() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setIothreads(10);
+        assertThat(protocol.getIothreads(), is(10));
+    }
+
+    @Test
+    public void testQueues() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setQueues(10);
+        assertThat(protocol.getQueues(), is(10));
+    }
+
+    @Test
+    public void testAccepts() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setAccepts(10);
+        assertThat(protocol.getAccepts(), is(10));
+    }
+
+    @Test
+    public void testAccesslog() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setAccesslog("access.log");
+        assertThat(protocol.getAccesslog(), equalTo("access.log"));
+    }
+
+    @Test
+    public void testRegister() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setRegister(true);
+        assertThat(protocol.isRegister(), is(true));
+    }
+
+    @Test
+    public void testParameters() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setParameters(Collections.singletonMap("k1", "v1"));
+        assertThat(protocol.getParameters(), hasEntry("k1", "v1"));
+    }
+
+    @Test
+    public void testDefault() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setDefault(true);
+        assertThat(protocol.isDefault(), is(true));
+    }
+
+    @Test
+    public void testKeepAlive() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setKeepAlive(true);
+        assertThat(protocol.getKeepAlive(), is(true));
+    }
+
+    @Test
+    public void testOptimizer() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setOptimizer("optimizer");
+        assertThat(protocol.getOptimizer(), equalTo("optimizer"));
+    }
+
+    @Test
+    public void testExtension() throws Exception {
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setExtension("extension");
+        assertThat(protocol.getExtension(), equalTo("extension"));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
new file mode 100644
index 0000000..10bdeb7
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import com.alibaba.dubbo.config.ProviderConfig;
+
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.hasKey;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertThat;
+
+public class ProviderConfigTest {
+    @Test
+    public void testProtocol() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setProtocol("protocol");
+        assertThat(provider.getProtocol().getName(), equalTo("protocol"));
+    }
+
+    @Test
+    public void testDefault() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setDefault(true);
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProviderConfig.appendParameters(parameters, provider);
+        assertThat(provider.isDefault(), is(true));
+        assertThat(parameters, not(hasKey("default")));
+    }
+
+    @Test
+    public void testHost() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setHost("demo-host");
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProviderConfig.appendParameters(parameters, provider);
+        assertThat(provider.getHost(), equalTo("demo-host"));
+        assertThat(parameters, not(hasKey("host")));
+    }
+
+    @Test
+    public void testPort() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setPort(8080);
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProviderConfig.appendParameters(parameters, provider);
+        assertThat(provider.getPort(), is(8080));
+        assertThat(parameters, not(hasKey("port")));
+    }
+
+    @Test
+    public void testPath() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setPath("/path");
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProviderConfig.appendParameters(parameters, provider);
+        assertThat(provider.getPath(), equalTo("/path"));
+        assertThat(provider.getContextpath(), equalTo("/path"));
+        assertThat(parameters, not(hasKey("path")));
+    }
+
+    @Test
+    public void testContextPath() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setContextpath("/context-path");
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProviderConfig.appendParameters(parameters, provider);
+        assertThat(provider.getContextpath(), equalTo("/context-path"));
+        assertThat(parameters, not(hasKey("/context-path")));
+    }
+
+
+    @Test
+    public void testThreads() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setThreads(10);
+        assertThat(provider.getThreads(), is(10));
+    }
+
+    @Test
+    public void testIothreads() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setIothreads(10);
+        assertThat(provider.getIothreads(), is(10));
+    }
+
+    @Test
+    public void testQueues() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setQueues(10);
+        assertThat(provider.getQueues(), is(10));
+    }
+
+    @Test
+    public void testAccepts() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setAccepts(10);
+        assertThat(provider.getAccepts(), is(10));
+    }
+
+    @Test
+    public void testCharset() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setCharset("utf-8");
+        assertThat(provider.getCharset(), equalTo("utf-8"));
+    }
+
+    @Test
+    public void testPayload() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setPayload(10);
+        assertThat(provider.getPayload(), is(10));
+    }
+
+    @Test
+    public void testBuffer() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setBuffer(10);
+        assertThat(provider.getBuffer(), is(10));
+    }
+
+    @Test
+    public void testServer() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setServer("demo-server");
+        assertThat(provider.getServer(), equalTo("demo-server"));
+    }
+
+    @Test
+    public void testClient() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setClient("client");
+        assertThat(provider.getClient(), equalTo("client"));
+    }
+
+    @Test
+    public void testPrompt() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setPrompt("#");
+        Map<String, String> parameters = new HashMap<String, String>();
+        ProviderConfig.appendParameters(parameters, provider);
+        assertThat(provider.getPrompt(), equalTo("#"));
+        assertThat(parameters, hasEntry("prompt", "%23"));
+    }
+
+    @Test
+    public void testDispatcher() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setDispatcher("mockdispatcher");
+        assertThat(provider.getDispatcher(), equalTo("mockdispatcher"));
+    }
+
+    @Test
+    public void testNetworker() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setNetworker("networker");
+        assertThat(provider.getNetworker(), equalTo("networker"));
+    }
+
+    @Test
+    public void testWait() throws Exception {
+        ProviderConfig provider = new ProviderConfig();
+        provider.setWait(10);
+        assertThat(provider.getWait(), equalTo(10));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
new file mode 100644
index 0000000..7f331e6
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import org.apache.dubbo.service.DemoService;
+import org.apache.dubbo.service.DemoServiceImpl;
+
+import com.alibaba.dubbo.config.ApplicationConfig;
+import com.alibaba.dubbo.config.RegistryConfig;
+import com.alibaba.dubbo.config.ProtocolConfig;
+import com.alibaba.dubbo.config.ServiceConfig;
+import com.alibaba.dubbo.config.ReferenceConfig;
+
+import org.junit.Test;
+
+public class ReferenceConfigTest {
+
+    @Test
+    public void testInjvm() throws Exception {
+        ApplicationConfig application = new ApplicationConfig();
+        application.setName("test-protocol-random-port");
+
+        RegistryConfig registry = new RegistryConfig();
+        registry.setAddress("multicast://224.5.6.7:1234");
+
+        ProtocolConfig protocol = new ProtocolConfig();
+        protocol.setName("dubbo");
+
+        ServiceConfig<DemoService> demoService;
+        demoService = new ServiceConfig<DemoService>();
+        demoService.setInterface(DemoService.class);
+        demoService.setRef(new DemoServiceImpl());
+        demoService.setApplication(application);
+        demoService.setRegistry(registry);
+        demoService.setProtocol(protocol);
+
+        ReferenceConfig<DemoService> rc = new ReferenceConfig<DemoService>();
+        rc.setApplication(application);
+        rc.setRegistry(registry);
+        rc.setInterface(DemoService.class.getName());
+        rc.setInjvm(false);
+
+        try {
+            demoService.export();
+            rc.get();
+        } finally {
+            demoService.unexport();
+        }
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
new file mode 100644
index 0000000..1511f42
--- /dev/null
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo.config;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.config.RegistryConfig;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.hasKey;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertThat;
+
+public class RegistryConfigTest {
+    @Test
+    public void testProtocol() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setProtocol("protocol");
+        assertThat(registry.getProtocol(), equalTo(registry.getProtocol()));
+    }
+
+    @Test
+    public void testAddress() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setAddress("localhost");
+        assertThat(registry.getAddress(), equalTo("localhost"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        RegistryConfig.appendParameters(parameters, registry);
+        assertThat(parameters, not(hasKey("address")));
+    }
+
+    @Test
+    public void testUsername() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setUsername("username");
+        assertThat(registry.getUsername(), equalTo("username"));
+    }
+
+    @Test
+    public void testPassword() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setPassword("password");
+        assertThat(registry.getPassword(), equalTo("password"));
+    }
+
+    @Test
+    public void testWait() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setWait(10);
+        assertThat(registry.getWait(), is(10));
+        assertThat(System.getProperty(Constants.SHUTDOWN_WAIT_KEY), equalTo("10"));
+    }
+
+    @Test
+    public void testCheck() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setCheck(true);
+        assertThat(registry.isCheck(), is(true));
+    }
+
+    @Test
+    public void testFile() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setFile("file");
+        assertThat(registry.getFile(), equalTo("file"));
+    }
+
+    @Test
+    public void testTransporter() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setTransporter("transporter");
+        assertThat(registry.getTransporter(), equalTo("transporter"));
+    }
+
+    @Test
+    public void testClient() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setClient("client");
+        assertThat(registry.getClient(), equalTo("client"));
+    }
+
+    @Test
+    public void testTimeout() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setTimeout(10);
+        assertThat(registry.getTimeout(), is(10));
+    }
+
+    @Test
+    public void testSession() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setSession(10);
+        assertThat(registry.getSession(), is(10));
+    }
+
+    @Test
+    public void testDynamic() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setDynamic(true);
+        assertThat(registry.isDynamic(), is(true));
+    }
+
+    @Test
+    public void testRegister() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setRegister(true);
+        assertThat(registry.isRegister(), is(true));
+    }
+
+    @Test
+    public void testSubscribe() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setSubscribe(true);
+        assertThat(registry.isSubscribe(), is(true));
+    }
+
+    @Test
+    public void testCluster() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setCluster("cluster");
+        assertThat(registry.getCluster(), equalTo("cluster"));
+    }
+
+    @Test
+    public void testGroup() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setGroup("group");
+        assertThat(registry.getGroup(), equalTo("group"));
+    }
+
+    @Test
+    public void testVersion() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setVersion("1.0.0");
+        assertThat(registry.getVersion(), equalTo("1.0.0"));
+    }
+
+    @Test
+    public void testParameters() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setParameters(Collections.singletonMap("k1", "v1"));
+        assertThat(registry.getParameters(), hasEntry("k1", "v1"));
+        Map<String, String> parameters = new HashMap<String, String>();
+        RegistryConfig.appendParameters(parameters, registry);
+        assertThat(parameters, hasEntry("k1", "v1"));
+    }
+
+    @Test
+    public void testDefault() throws Exception {
+        RegistryConfig registry = new RegistryConfig();
+        registry.setDefault(true);
+        assertThat(registry.isDefault(), is(true));
+    }
+}
\ No newline at end of file
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/echo/EchoServiceTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/echo/EchoServiceTest.java
similarity index 93%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/echo/EchoServiceTest.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/echo/EchoServiceTest.java
index d02a70f..b9d1cf7 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/echo/EchoServiceTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/echo/EchoServiceTest.java
@@ -15,18 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.echo;
+package org.apache.dubbo.echo;
 
 import com.alibaba.dubbo.rpc.service.EchoService;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.compatible.service.DemoService;
-import org.apache.dubbo.compatible.service.DemoServiceImpl;
+import org.apache.dubbo.service.DemoService;
+import org.apache.dubbo.service.DemoServiceImpl;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
+
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/FilterTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/filter/FilterTest.java
similarity index 94%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/FilterTest.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/filter/FilterTest.java
index 20fce74..53a2db3 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/FilterTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/filter/FilterTest.java
@@ -15,14 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.filter;
+package org.apache.dubbo.filter;
 
-import org.apache.dubbo.compatible.service.MockInvocation;
+import org.apache.dubbo.service.MockInvocation;
 import org.apache.dubbo.rpc.Filter;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcException;
+
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/MyFilter.java b/dubbo-compatible/src/test/java/org/apache/dubbo/filter/MyFilter.java
similarity index 97%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/MyFilter.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/filter/MyFilter.java
index 7970547..b7d7e24 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/MyFilter.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/filter/MyFilter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.filter;
+package org.apache.dubbo.filter;
 
 import com.alibaba.dubbo.rpc.Filter;
 import com.alibaba.dubbo.rpc.Invocation;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/MyInvoker.java b/dubbo-compatible/src/test/java/org/apache/dubbo/filter/MyInvoker.java
similarity index 92%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/MyInvoker.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/filter/MyInvoker.java
index 6602422..5d69754 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/filter/MyInvoker.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/filter/MyInvoker.java
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.filter;
+package org.apache.dubbo.filter;
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.compatible.service.DemoService;
+import org.apache.dubbo.service.DemoService;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Result;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/generic/GenericServiceTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/generic/GenericServiceTest.java
similarity index 95%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/generic/GenericServiceTest.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/generic/GenericServiceTest.java
index bebcf52..f31234b 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/generic/GenericServiceTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/generic/GenericServiceTest.java
@@ -15,18 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.generic;
+package org.apache.dubbo.generic;
 
 import com.alibaba.dubbo.rpc.service.GenericService;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.compatible.service.DemoService;
-import org.apache.dubbo.compatible.service.DemoServiceImpl;
+import org.apache.dubbo.service.DemoService;
+import org.apache.dubbo.service.DemoServiceImpl;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
+
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MyObjectInput.java b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MyObjectInput.java
similarity index 97%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MyObjectInput.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MyObjectInput.java
index 9703d8e..0e1d96c 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MyObjectInput.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MyObjectInput.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.serialization;
+package org.apache.dubbo.serialization;
 
 import com.alibaba.dubbo.common.serialize.ObjectInput;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MyObjectOutput.java b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MyObjectOutput.java
similarity index 97%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MyObjectOutput.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MyObjectOutput.java
index c4f7524..7147515 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MyObjectOutput.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MyObjectOutput.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.serialization;
+package org.apache.dubbo.serialization;
 
 import com.alibaba.dubbo.common.serialize.ObjectOutput;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MySerialization.java b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MySerialization.java
similarity index 96%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MySerialization.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MySerialization.java
index d2d5125..94db705 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/MySerialization.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/MySerialization.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.serialization;
+package org.apache.dubbo.serialization;
 
 import com.alibaba.dubbo.common.URL;
 import com.alibaba.dubbo.common.serialize.ObjectInput;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/SerializationTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/SerializationTest.java
similarity index 98%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/SerializationTest.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/serialization/SerializationTest.java
index aea0f9b..b2adac4 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/serialization/SerializationTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/serialization/SerializationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.compatible.serialization;
+package org.apache.dubbo.serialization;
 
 import org.apache.dubbo.common.serialize.ObjectInput;
 import org.apache.dubbo.common.serialize.ObjectOutput;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/CustomArgument.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/CustomArgument.java
similarity index 96%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/CustomArgument.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/service/CustomArgument.java
index 400aaeb..76ffeb4 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/CustomArgument.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/CustomArgument.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.service;
+package org.apache.dubbo.service;
 
 import java.io.Serializable;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/DemoService.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/DemoService.java
similarity index 96%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/DemoService.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/service/DemoService.java
index 6183cad..b73fa49 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/DemoService.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/DemoService.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.service;
+package org.apache.dubbo.service;
 
 public interface DemoService {
     String sayHello(String name);
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/DemoServiceImpl.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/DemoServiceImpl.java
similarity index 97%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/DemoServiceImpl.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/service/DemoServiceImpl.java
index 4fdfe59..cfbcf80 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/DemoServiceImpl.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/DemoServiceImpl.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.service;
+package org.apache.dubbo.service;
 
 import org.apache.dubbo.rpc.RpcContext;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/MockInvocation.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java
similarity index 94%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/MockInvocation.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java
index a361603..148b5bc 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/MockInvocation.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.service;
+package org.apache.dubbo.service;
 
 import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.rpc.Invocation;
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Person.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/Person.java
similarity index 93%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Person.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/service/Person.java
index 7651233..3a856a1 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Person.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/Person.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.service;
+package org.apache.dubbo.service;
 
 import java.io.Serializable;
 
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/Type.java
similarity index 92%
rename from dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
rename to dubbo-compatible/src/test/java/org/apache/dubbo/service/Type.java
index e6bcf4c..070ceaa 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/compatible/service/Type.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/Type.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.compatible.service;
+package org.apache.dubbo.service;
 
 public enum Type {
     High, Normal, Lower
diff --git a/dubbo-compatible/src/test/resources/META-INF/services/com.alibaba.dubbo.common.extension.ExtensionFactory b/dubbo-compatible/src/test/resources/META-INF/services/com.alibaba.dubbo.common.extension.ExtensionFactory
index 2cc5026..e4e4b43 100644
--- a/dubbo-compatible/src/test/resources/META-INF/services/com.alibaba.dubbo.common.extension.ExtensionFactory
+++ b/dubbo-compatible/src/test/resources/META-INF/services/com.alibaba.dubbo.common.extension.ExtensionFactory
@@ -1 +1 @@
-myfactory=org.apache.dubbo.compatible.common.extension.MyExtensionFactory
\ No newline at end of file
+myfactory=org.apache.dubbo.common.extension.MyExtensionFactory
\ No newline at end of file