Skip to content

Commit

Permalink
Merge branch 'apache:2.x' into feature_6760
Browse files Browse the repository at this point in the history
  • Loading branch information
lyl2008dsg authored Aug 28, 2024
2 parents 8ea12b6 + 3bb8f73 commit 90802c4
Show file tree
Hide file tree
Showing 19 changed files with 792 additions and 1,342 deletions.
4 changes: 4 additions & 0 deletions changes/en-us/2.x.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ Add changes here for all PR submitted to the 2.x branch.
- [[#6780](https://github.com/apache/incubator-seata/pull/6780)] optimize the reflection operation in class `SerializerServiceLoader`
- [[#6784](https://github.com/apache/incubator-seata/pull/6784)] upgrade axios to 1.7.4
- [[#6787](https://github.com/apache/incubator-seata/pull/6787)] upgrade elliptic to 6.5.7
- [[#6783](https://github.com/apache/incubator-seata/pull/6783)] rename the server naming/v1 api to vgroup/v1
- [[#6793](https://github.com/apache/incubator-seata/pull/6793)] fix npmjs conflicts

### refactor:

Expand All @@ -79,9 +81,11 @@ Add changes here for all PR submitted to the 2.x branch.
- [[#6608](https://github.com/apache/incubator-seata/pull/6608)] add unit test for sql-parser-core
- [[#6647](https://github.com/apache/incubator-seata/pull/6647)] improve the test case coverage of saga module to 70%
- [[#6695](https://github.com/apache/incubator-seata/pull/6695)] old version(< 0.7.1) client test case for multi-version protocol
- [[#6764](https://github.com/apache/incubator-seata/pull/6764)] add Apollo mock test case
- [[#6750](https://github.com/apache/incubator-seata/pull/6750)] increase spring autoconfigure module unit test converage
- [[#6773](https://github.com/apache/incubator-seata/pull/6773)] fix the wrong code coverage from codecov icon in default branch


Thanks to these contributors for their code commits. Please report an unintended omission.

<!-- Please make sure your Github ID is in the list below -->
Expand Down
3 changes: 3 additions & 0 deletions changes/zh-cn/2.x.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@
- [[#6780](https://github.com/apache/incubator-seata/pull/6780)] 优化类 `SerializerServiceLoader` 中的反射操作
- [[#6784](https://github.com/apache/incubator-seata/pull/6784)] 升级 axios 至 1.7.4 版本
- [[#6787](https://github.com/apache/incubator-seata/pull/6787)] 升级 elliptic 至 6.5.7 版本
- [[#6783](https://github.com/apache/incubator-seata/pull/6783)] 将server事务分组修改接口改为/vgroup/v1
- [[#6793](https://github.com/apache/incubator-seata/pull/6793)] 修复 npmjs 依赖冲突问题


### refactor:
Expand All @@ -82,6 +84,7 @@
- [[#6608](https://github.com/apache/incubator-seata/pull/6608)] 添加sql-parser-core模块测试用例
- [[#6647](https://github.com/apache/incubator-seata/pull/6647)] 增加saga模块的测试用例覆盖率
- [[#6695](https://github.com/apache/incubator-seata/pull/6695)] 多版本协议的旧版本(< 0.7.1)客户端测试用例
- [[#6764](https://github.com/apache/incubator-seata/pull/6764)] 增加 Apollo Mock 测试用例
- [[#6750](https://github.com/apache/incubator-seata/pull/6750)] 提升spring autoconfigure模块单测覆盖率
- [[#6773](https://github.com/apache/incubator-seata/pull/6773)] 修复codecov图标显示错误的代码覆盖率

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public interface NamingServerConstants {
/**
* The constant HTTP_ADD_GROUP_SUFFIX
*/
String HTTP_ADD_GROUP_SUFFIX = "/naming/v1/addVGroup?";
String HTTP_ADD_GROUP_SUFFIX = "/vgroup/v1/addVGroup?";

/**
* The constant CONSTANT_UNIT
Expand All @@ -40,7 +40,7 @@ public interface NamingServerConstants {
/**
* The constant HTTP_REMOVE_GROUP_SUFFIX
*/
String HTTP_REMOVE_GROUP_SUFFIX = "/naming/v1/removeVGroup?";
String HTTP_REMOVE_GROUP_SUFFIX = "/vgroup/v1/removeVGroup?";

/**
* The constant IP_PORT_SPLIT_CHAR
Expand Down
10 changes: 10 additions & 0 deletions config/seata-config-apollo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -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.seata.config.apollo;

import java.io.IOException;

import org.apache.seata.common.exception.NotSupportYetException;
import org.apache.seata.config.ConfigurationChangeEvent;
import org.apache.seata.config.ConfigurationChangeListener;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

/**
* The type Apollo configuration test.
*/
public class ApolloConfigurationTest {

private static final int PORT = 8081;
private static ApolloMockServer apolloMockServer;

private static ApolloConfiguration apolloConfiguration;

/**
* Sets up.
*
* @throws IOException the io exception
*/
@BeforeAll
public static void setUp() throws IOException {
System.setProperty("seataEnv", "test");
apolloMockServer = new ApolloMockServer(PORT);
apolloConfiguration = ApolloConfiguration.getInstance();
}

/**
* Test get config.
*/
@Test
public void testGetConfig() {
String value = apolloConfiguration.getConfig("seata.test");
Assertions.assertEquals("mockdata", value);
value = apolloConfiguration.getConfig("seata.key");
Assertions.assertNull(value);
value = apolloConfiguration.getConfig("seata.key.1", "default");
Assertions.assertEquals("default", value);
value = apolloConfiguration.getLatestConfig("seata.key.2", "default", 3000);
Assertions.assertEquals("default", value);
}

/**
* Test update config.
*/
@Test
public void testUpdateConfig() {
Assertions.assertThrows(NotSupportYetException.class, () -> {
apolloConfiguration.putConfig("seata.test", "mockdata");
});
Assertions.assertThrows(NotSupportYetException.class, () -> {
apolloConfiguration.putConfigIfAbsent("seata.test", "mockdata");
});
Assertions.assertThrows(NotSupportYetException.class, () -> {
apolloConfiguration.removeConfig("seata.test");
});
}

/**
* Test listener.
*/
@Test
public void testListener() {
ConfigurationChangeListener listener = new ConfigurationChangeListener() {
@Override
public void onChangeEvent(ConfigurationChangeEvent event) {

}
};
apolloConfiguration.addConfigListener("seata.test", listener);
Assertions.assertEquals(1, apolloConfiguration.getConfigListeners("seata.test").size());
apolloConfiguration.removeConfigListener("seata.test", null);
Assertions.assertEquals(1, apolloConfiguration.getConfigListeners("seata.test").size());
apolloConfiguration.removeConfigListener("seata.test", listener);
Assertions.assertEquals(0, apolloConfiguration.getConfigListeners("seata.test").size());

}

/**
* Tear down.
*
* @throws IOException the io exception
*/
@AfterAll
public static void tearDown() throws IOException {
System.clearProperty("seataEnv");
apolloMockServer.stop();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/*
* 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.seata.config.apollo;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import com.ctrip.framework.apollo.core.dto.ApolloConfig;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.mockwebserver.Dispatcher;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;

/**
* The type Apollo mock server.
*/
public class ApolloMockServer {

private MockWebServer server;
private final ObjectMapper mapper = new ObjectMapper();

private final String CONFIG_PREFIX_PATH = "/configs";

/**
* Instantiates a new Apollo mock server.
*
* @param port the port
* @throws IOException the io exception
*/
public ApolloMockServer(int port) throws IOException {

server = new MockWebServer();
server.setDispatcher(new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest request) throws InterruptedException {
if (request.getPath().startsWith(CONFIG_PREFIX_PATH)) {
List<String> pathSegments = request.getRequestUrl().pathSegments();
String appId = pathSegments.get(1);
String cluster = pathSegments.get(2);
String namespace = pathSegments.get(3);
String result;
try {
result = loadMockData(appId, cluster, namespace);
return new MockResponse().setResponseCode(200).setBody(result);
} catch (JsonProcessingException e) {
}
}
return new MockResponse().setResponseCode(404);
}
});
server.start(port);
System.setProperty("apollo.configService", "http://localhost:" + port);

}

private String loadMockData(String appId, String Cluster, String namespace) throws JsonProcessingException {
String fileName = "mock-" + namespace + ".properties";
ApolloConfig apolloConfig = new ApolloConfig(appId, Cluster, namespace, "releaseKey");
Properties properties = new Properties();
try (InputStream input = this.getClass().getClassLoader().getResourceAsStream(fileName)) {
if (null != input) {
properties.load(input);
}
} catch (Exception ignore) {
}
Map<String, String> configurations = new HashMap<>();
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
configurations.put(entry.getKey().toString(), entry.getValue().toString());
}
apolloConfig.setConfigurations(configurations);
String json = mapper.writeValueAsString(apolloConfig);
return json;

}

/**
* Stop.
*
* @throws IOException the io exception
*/
public void stop() throws IOException {
if (null != server) {
server.shutdown();
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#
# 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.
#
org.apache.seata.config.apollo.ApolloConfigurationProvider
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#
# 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.
#
seata.test=mockdata
Loading

0 comments on commit 90802c4

Please sign in to comment.