Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Apache RocketMQ
Rocketmq
提交
264a0560
R
Rocketmq
项目概览
Apache RocketMQ
/
Rocketmq
上一次同步 大约 3 年
通知
267
Star
16139
Fork
68
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rocketmq
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
264a0560
编写于
1月 20, 2017
作者:
Y
yukon
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ROCKETMQ-51] Add unit tests for SendMessageProcessor
上级
b997c974
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
205 addition
and
15 deletion
+205
-15
broker/src/test/java/org/apache/rocketmq/broker/BrokerControllerTest.java
...java/org/apache/rocketmq/broker/BrokerControllerTest.java
+5
-15
broker/src/test/java/org/apache/rocketmq/broker/processor/SendMessageProcessorTest.java
...e/rocketmq/broker/processor/SendMessageProcessorTest.java
+200
-0
未找到文件。
broker/src/test/java/org/apache/rocketmq/broker/BrokerControllerTest.java
浏览文件 @
264a0560
...
...
@@ -21,37 +21,27 @@ import org.apache.rocketmq.common.BrokerConfig;
import
org.apache.rocketmq.remoting.netty.NettyClientConfig
;
import
org.apache.rocketmq.remoting.netty.NettyServerConfig
;
import
org.apache.rocketmq.store.config.MessageStoreConfig
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
BrokerControllerTest
{
private
static
final
int
RESTART_NUM
=
3
;
protected
Logger
logger
=
LoggerFactory
.
getLogger
(
BrokerControllerTest
.
class
);
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
public
class
BrokerControllerTest
{
/**
* Tests if the controller can be properly stopped and started.
*
* @throws Exception If fails.
*/
@Test
public
void
testRestart
()
throws
Exception
{
for
(
int
i
=
0
;
i
<
RESTART_NUM
;
i
++)
{
public
void
testBrokerRestart
()
throws
Exception
{
for
(
int
i
=
0
;
i
<
2
;
i
++)
{
BrokerController
brokerController
=
new
BrokerController
(
//
new
BrokerConfig
(),
//
new
NettyServerConfig
(),
//
new
NettyClientConfig
(),
//
new
MessageStoreConfig
());
boolean
initResult
=
brokerController
.
initialize
();
Assert
.
assertTrue
(
initResult
);
logger
.
info
(
"Broker is initialized "
+
initResult
);
assertThat
(
brokerController
.
initialize
());
brokerController
.
start
();
logger
.
info
(
"Broker is started"
);
brokerController
.
shutdown
();
logger
.
info
(
"Broker is stopped"
);
}
}
}
broker/src/test/java/org/apache/rocketmq/broker/processor/SendMessageProcessorTest.java
0 → 100644
浏览文件 @
264a0560
/*
* 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.rocketmq.broker.processor
;
import
io.netty.channel.Channel
;
import
io.netty.channel.ChannelHandlerContext
;
import
java.net.InetSocketAddress
;
import
org.apache.rocketmq.broker.BrokerController
;
import
org.apache.rocketmq.common.BrokerConfig
;
import
org.apache.rocketmq.common.MixAll
;
import
org.apache.rocketmq.common.message.MessageExt
;
import
org.apache.rocketmq.common.protocol.RequestCode
;
import
org.apache.rocketmq.common.protocol.ResponseCode
;
import
org.apache.rocketmq.common.protocol.header.ConsumerSendMsgBackRequestHeader
;
import
org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader
;
import
org.apache.rocketmq.remoting.exception.RemotingCommandException
;
import
org.apache.rocketmq.remoting.netty.NettyClientConfig
;
import
org.apache.rocketmq.remoting.netty.NettyServerConfig
;
import
org.apache.rocketmq.remoting.protocol.RemotingCommand
;
import
org.apache.rocketmq.store.AppendMessageResult
;
import
org.apache.rocketmq.store.AppendMessageStatus
;
import
org.apache.rocketmq.store.MessageExtBrokerInner
;
import
org.apache.rocketmq.store.MessageStore
;
import
org.apache.rocketmq.store.PutMessageResult
;
import
org.apache.rocketmq.store.PutMessageStatus
;
import
org.apache.rocketmq.store.config.MessageStoreConfig
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.Spy
;
import
org.mockito.invocation.InvocationOnMock
;
import
org.mockito.junit.MockitoJUnitRunner
;
import
org.mockito.stubbing.Answer
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyLong
;
import
static
org
.
mockito
.
Mockito
.
doAnswer
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
when
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
SendMessageProcessorTest
{
private
SendMessageProcessor
sendMessageProcessor
;
@Mock
private
ChannelHandlerContext
handlerContext
;
@Spy
private
BrokerController
brokerController
=
new
BrokerController
(
new
BrokerConfig
(),
new
NettyServerConfig
(),
new
NettyClientConfig
(),
new
MessageStoreConfig
());
@Mock
private
MessageStore
messageStore
;
@Before
public
void
init
()
{
brokerController
.
setMessageStore
(
messageStore
);
when
(
messageStore
.
now
()).
thenReturn
(
System
.
currentTimeMillis
());
Channel
mockChannel
=
mock
(
Channel
.
class
);
when
(
mockChannel
.
remoteAddress
()).
thenReturn
(
new
InetSocketAddress
(
1024
));
when
(
handlerContext
.
channel
()).
thenReturn
(
mockChannel
);
when
(
messageStore
.
lookMessageByOffset
(
anyLong
())).
thenReturn
(
new
MessageExt
());
}
@Test
public
void
testProcessRequest
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
PUT_OK
,
new
AppendMessageResult
(
AppendMessageStatus
.
PUT_OK
)));
assertPutResult
(
ResponseCode
.
SUCCESS
);
}
@Test
public
void
testProcessRequest_FlushTimeOut
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
FLUSH_DISK_TIMEOUT
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
FLUSH_DISK_TIMEOUT
);
}
@Test
public
void
testProcessRequest_MessageIllegal
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
MESSAGE_ILLEGAL
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
MESSAGE_ILLEGAL
);
}
@Test
public
void
testProcessRequest_CreateMappedFileFailed
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
CREATE_MAPEDFILE_FAILED
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
SYSTEM_ERROR
);
}
@Test
public
void
testProcessRequest_FlushSlaveTimeout
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
FLUSH_SLAVE_TIMEOUT
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
FLUSH_SLAVE_TIMEOUT
);
}
@Test
public
void
testProcessRequest_PageCacheBusy
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
OS_PAGECACHE_BUSY
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
SYSTEM_ERROR
);
}
@Test
public
void
testProcessRequest_PropertiesTooLong
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
PROPERTIES_SIZE_EXCEEDED
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
MESSAGE_ILLEGAL
);
}
@Test
public
void
testProcessRequest_ServiceNotAvailable
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
SERVICE_NOT_AVAILABLE
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
SERVICE_NOT_AVAILABLE
);
}
@Test
public
void
testProcessRequest_SlaveNotAvailable
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
SLAVE_NOT_AVAILABLE
,
new
AppendMessageResult
(
AppendMessageStatus
.
UNKNOWN_ERROR
)));
assertPutResult
(
ResponseCode
.
SLAVE_NOT_AVAILABLE
);
}
@Test
public
void
testProcessRequest_WithMsgBack
()
throws
RemotingCommandException
{
when
(
messageStore
.
putMessage
(
any
(
MessageExtBrokerInner
.
class
))).
thenReturn
(
new
PutMessageResult
(
PutMessageStatus
.
PUT_OK
,
new
AppendMessageResult
(
AppendMessageStatus
.
PUT_OK
)));
final
RemotingCommand
request
=
createSendMsgBackCommand
(
RequestCode
.
CONSUMER_SEND_MSG_BACK
);
sendMessageProcessor
=
new
SendMessageProcessor
(
brokerController
);
final
RemotingCommand
response
=
sendMessageProcessor
.
processRequest
(
handlerContext
,
request
);
assertThat
(
response
).
isNotNull
();
assertThat
(
response
.
getCode
()).
isEqualTo
(
ResponseCode
.
SUCCESS
);
}
private
RemotingCommand
createSendMsgCommand
(
int
requestCode
)
{
SendMessageRequestHeader
requestHeader
=
new
SendMessageRequestHeader
();
requestHeader
.
setProducerGroup
(
"FooBar_PID"
);
requestHeader
.
setTopic
(
"FooBar"
);
requestHeader
.
setDefaultTopic
(
MixAll
.
DEFAULT_TOPIC
);
requestHeader
.
setDefaultTopicQueueNums
(
3
);
requestHeader
.
setQueueId
(
1
);
requestHeader
.
setSysFlag
(
0
);
requestHeader
.
setBornTimestamp
(
System
.
currentTimeMillis
());
requestHeader
.
setFlag
(
124
);
requestHeader
.
setReconsumeTimes
(
0
);
RemotingCommand
request
=
RemotingCommand
.
createRequestCommand
(
requestCode
,
requestHeader
);
request
.
addExtField
(
"queueId"
,
String
.
valueOf
(
requestHeader
.
getQueueId
()));
request
.
addExtField
(
"topic"
,
String
.
valueOf
(
requestHeader
.
getTopic
()));
request
.
addExtField
(
"defaultTopicQueueNums"
,
String
.
valueOf
(
requestHeader
.
getDefaultTopicQueueNums
()));
request
.
addExtField
(
"defaultTopic"
,
requestHeader
.
getDefaultTopic
());
request
.
addExtField
(
"sysFlag"
,
String
.
valueOf
(
requestHeader
.
getSysFlag
()));
request
.
addExtField
(
"flag"
,
String
.
valueOf
(
requestHeader
.
getFlag
()));
request
.
addExtField
(
"bornTimestamp"
,
String
.
valueOf
(
requestHeader
.
getBornTimestamp
()));
return
request
;
}
private
RemotingCommand
createSendMsgBackCommand
(
int
requestCode
)
{
ConsumerSendMsgBackRequestHeader
requestHeader
=
new
ConsumerSendMsgBackRequestHeader
();
requestHeader
.
setMaxReconsumeTimes
(
3
);
requestHeader
.
setDelayLevel
(
4
);
requestHeader
.
setGroup
(
"FooBar_PID"
);
requestHeader
.
setOffset
(
123L
);
RemotingCommand
request
=
RemotingCommand
.
createRequestCommand
(
requestCode
,
requestHeader
);
request
.
addExtField
(
"group"
,
requestHeader
.
getGroup
());
request
.
addExtField
(
"offset"
,
String
.
valueOf
(
requestHeader
.
getOffset
()));
request
.
addExtField
(
"delayLevel"
,
String
.
valueOf
(
requestHeader
.
getDelayLevel
()));
return
request
;
}
private
void
assertPutResult
(
int
responseCode
)
throws
RemotingCommandException
{
final
RemotingCommand
request
=
createSendMsgCommand
(
RequestCode
.
SEND_MESSAGE
);
final
RemotingCommand
[]
response
=
new
RemotingCommand
[
1
];
doAnswer
(
new
Answer
()
{
@Override
public
Object
answer
(
InvocationOnMock
invocation
)
throws
Throwable
{
response
[
0
]
=
invocation
.
getArgument
(
0
);
return
null
;
}
}).
when
(
handlerContext
).
writeAndFlush
(
any
(
Object
.
class
));
sendMessageProcessor
=
new
SendMessageProcessor
(
brokerController
);
RemotingCommand
responseToReturn
=
sendMessageProcessor
.
processRequest
(
handlerContext
,
request
);
if
(
responseToReturn
!=
null
)
{
assertThat
(
response
[
0
]).
isNull
();
response
[
0
]
=
responseToReturn
;
}
assertThat
(
response
[
0
].
getCode
()).
isEqualTo
(
responseCode
);
assertThat
(
response
[
0
].
getOpaque
()).
isEqualTo
(
request
.
getOpaque
());
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录