/* | |
* Copyright 1999-2011 Alibaba Group. | |
* | |
* Licensed 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.remoting; | |
import java.util.ArrayList; | |
import java.util.Random; | |
import junit.framework.TestCase; | |
import org.junit.Test; | |
import com.alibaba.dubbo.common.Constants; | |
import com.alibaba.dubbo.common.logger.Logger; | |
import com.alibaba.dubbo.common.logger.LoggerFactory; | |
import com.alibaba.dubbo.remoting.exchange.ExchangeClient; | |
import com.alibaba.dubbo.remoting.exchange.Exchangers; | |
public class PerformanceClientFixedTest extends TestCase { | |
private static final Logger logger = LoggerFactory.getLogger(PerformanceClientTest.class); | |
@Test | |
public void testClient() throws Exception { | |
// 读取参数 | |
if (PerformanceUtils.getProperty("server", null) == null) { | |
logger.warn("Please set -Dserver=127.0.0.1:9911"); | |
return; | |
} | |
final String server = System.getProperty("server", "127.0.0.1:9911"); | |
final String transporter = PerformanceUtils.getProperty(Constants.TRANSPORTER_KEY, Constants.DEFAULT_TRANSPORTER); | |
final String serialization = PerformanceUtils.getProperty(Constants.SERIALIZATION_KEY, Constants.DEFAULT_REMOTING_SERIALIZATION); | |
final int timeout = PerformanceUtils.getIntProperty(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT); | |
//final int length = PerformanceUtils.getIntProperty("length", 1024); | |
final int connectionCount = PerformanceUtils.getIntProperty(Constants.CONNECTIONS_KEY, 1); | |
//final int concurrent = PerformanceUtils.getIntProperty("concurrent", 100); | |
//int r = PerformanceUtils.getIntProperty("runs", 10000); | |
//final int runs = r > 0 ? r : Integer.MAX_VALUE; | |
//final String onerror = PerformanceUtils.getProperty("onerror", "continue"); | |
final String url = "exchange://" + server + "?transporter=" + transporter + "&serialization=" + serialization + "&timeout=" + timeout; | |
//int idx = server.indexOf(':'); | |
Random rd = new Random(connectionCount); | |
ArrayList<ExchangeClient> arrays = new ArrayList<ExchangeClient>(); | |
String oneKBlock = null; | |
String messageBlock = null; | |
int s = 0; | |
int f = 0; | |
System.out.println("initialize arrays " + url); | |
while (s < connectionCount) { | |
ExchangeClient client = null; | |
try { | |
System.out.println("open connection " + s + " " + url + arrays.size()); | |
client = Exchangers.connect(url); | |
System.out.println("run after open"); | |
if (client.isConnected()) { | |
arrays.add(client); | |
s++; | |
System.out.println("open client success " + s); | |
} else { | |
System.out.println("open client failed, try again."); | |
} | |
} catch (Throwable t) { | |
t.printStackTrace(); | |
} finally { | |
if (client != null && client.isConnected() == false) { | |
f++; | |
System.out.println("open client failed, try again " + f); | |
client.close(); | |
} | |
} | |
} | |
StringBuilder sb1 = new StringBuilder(); | |
Random rd2 = new Random(); | |
char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray(); | |
int size1 = numbersAndLetters.length; | |
for (int j = 0; j < 1024; j++) { | |
sb1.append(numbersAndLetters[rd2.nextInt(size1)]); | |
} | |
oneKBlock = sb1.toString(); | |
for (int j = 0; j < Integer.MAX_VALUE; j++) { | |
try { | |
String size = "10"; | |
int request_size = 10; | |
try { | |
request_size = Integer.parseInt(size); | |
} catch (Throwable t) { | |
request_size = 10; | |
} | |
if (messageBlock == null) { | |
StringBuilder sb = new StringBuilder(); | |
for (int i = 0; i < request_size; i++) { | |
sb.append(oneKBlock); | |
} | |
messageBlock = sb.toString(); | |
System.out.println("set messageBlock to " + messageBlock); | |
} | |
int index = rd.nextInt(connectionCount); | |
ExchangeClient client = arrays.get(index); | |
// ExchangeClient client = arrays.get(0); | |
String output = (String) client.request(messageBlock).get(); | |
if (output.lastIndexOf(messageBlock) < 0) { | |
System.out.println("send messageBlock;get " + output); | |
throw new Throwable("return results invalid"); | |
} else { | |
if (j % 100 == 0) | |
System.out.println("OK: " + j); | |
} | |
} catch (Throwable t) { | |
t.printStackTrace(); | |
} | |
} | |
} | |
} |