Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Apache RocketMQ
Rocketmq
提交
8357b440
R
Rocketmq
项目概览
Apache RocketMQ
/
Rocketmq
上一次同步 大约 3 年
通知
268
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看板
提交
8357b440
编写于
2月 20, 2019
作者:
R
ranqiqiang
提交者:
dinglei
2月 20, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[RIP-10] Add test cases of ScheduleMessageService (#782)
[RIP-10] Add test cases of ScheduleMessageService
上级
1128a5ad
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
230 addition
and
0 deletion
+230
-0
store/src/test/java/org/apache/rocketmq/store/schedule/ScheduleMessageServiceTest.java
...e/rocketmq/store/schedule/ScheduleMessageServiceTest.java
+230
-0
未找到文件。
store/src/test/java/org/apache/rocketmq/store/schedule/ScheduleMessageServiceTest.java
0 → 100644
浏览文件 @
8357b440
/*
* 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.store.schedule
;
import
org.apache.rocketmq.common.BrokerConfig
;
import
org.apache.rocketmq.common.UtilAll
;
import
org.apache.rocketmq.common.message.MessageDecoder
;
import
org.apache.rocketmq.common.message.MessageExt
;
import
org.apache.rocketmq.store.*
;
import
org.apache.rocketmq.store.config.MessageStoreConfig
;
import
org.apache.rocketmq.store.stats.BrokerStatsManager
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
java.io.File
;
import
java.net.InetAddress
;
import
java.net.InetSocketAddress
;
import
java.net.SocketAddress
;
import
java.net.UnknownHostException
;
import
java.nio.ByteBuffer
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
public
class
ScheduleMessageServiceTest
{
/**t
* defaultMessageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h"
*/
String
testMessageDelayLevel
=
"5s 10s"
;
/**
* choose delay level
* 1 = 5s
*/
int
delayLevel
=
1
;
private
static
final
String
storePath
=
System
.
getProperty
(
"user.home"
)
+
File
.
separator
+
"schedule_test"
;
private
static
final
int
commitLogFileSize
=
1024
;
private
static
final
int
cqFileSize
=
10
;
private
static
final
int
cqExtFileSize
=
10
*
(
ConsumeQueueExt
.
CqExtUnit
.
MIN_EXT_UNIT_SIZE
+
64
);
private
static
SocketAddress
bornHost
;
private
static
SocketAddress
storeHost
;
DefaultMessageStore
messageStore
;
MessageStoreConfig
messageStoreConfig
;
BrokerConfig
brokerConfig
;
ScheduleMessageService
scheduleMessageService
;
static
String
sendMessage
=
" ------- schedule message test -------"
;
static
{
try
{
bornHost
=
new
InetSocketAddress
(
InetAddress
.
getLocalHost
(),
8123
);
}
catch
(
UnknownHostException
e
)
{
e
.
printStackTrace
();
}
try
{
storeHost
=
new
InetSocketAddress
(
InetAddress
.
getByName
(
"127.0.0.1"
),
0
);
}
catch
(
UnknownHostException
e
)
{
e
.
printStackTrace
();
}
}
@Before
public
void
init
()
throws
Exception
{
messageStoreConfig
=
new
MessageStoreConfig
();
messageStoreConfig
.
setMessageDelayLevel
(
testMessageDelayLevel
);
messageStoreConfig
.
setMapedFileSizeCommitLog
(
commitLogFileSize
);
messageStoreConfig
.
setMapedFileSizeConsumeQueue
(
cqFileSize
);
messageStoreConfig
.
setMappedFileSizeConsumeQueueExt
(
cqExtFileSize
);
messageStoreConfig
.
setMessageIndexEnable
(
false
);
messageStoreConfig
.
setEnableConsumeQueueExt
(
true
);
messageStoreConfig
.
setStorePathRootDir
(
storePath
);
messageStoreConfig
.
setStorePathCommitLog
(
storePath
+
File
.
separator
+
"commitlog"
);
brokerConfig
=
new
BrokerConfig
();
BrokerStatsManager
manager
=
new
BrokerStatsManager
(
brokerConfig
.
getBrokerClusterName
());
messageStore
=
new
DefaultMessageStore
(
messageStoreConfig
,
manager
,
new
MyMessageArrivingListener
(),
new
BrokerConfig
());
assertThat
(
messageStore
.
load
()).
isTrue
();
messageStore
.
start
();
scheduleMessageService
=
messageStore
.
getScheduleMessageService
();
}
@Test
public
void
buildRunningStatsTest
()
throws
InterruptedException
{
MessageExtBrokerInner
msg
=
buildMessage
();
msg
.
setDelayTimeLevel
(
delayLevel
);
messageStore
.
putMessage
(
msg
);
// wait offsetTable
TimeUnit
.
SECONDS
.
sleep
(
1
);
scheduleMessageService
.
buildRunningStats
(
new
HashMap
<
String
,
String
>()
);
}
@Test
public
void
computeDeliverTimestampTest
()
{
// testMessageDelayLevel just "5s 10s"
long
storeTime
=
System
.
currentTimeMillis
();
long
time1
=
scheduleMessageService
.
computeDeliverTimestamp
(
1
,
storeTime
);
assertThat
(
time1
).
isEqualTo
(
storeTime
+
5
*
1000
);
long
time2
=
scheduleMessageService
.
computeDeliverTimestamp
(
2
,
storeTime
);
assertThat
(
time2
).
isEqualTo
(
storeTime
+
10
*
1000
);
}
@Test
public
void
delayLevel2QueueIdTest
()
{
int
queueId
=
ScheduleMessageService
.
delayLevel2QueueId
(
delayLevel
);
assertThat
(
queueId
).
isEqualTo
(
delayLevel
-
1
);
queueId
=
ScheduleMessageService
.
queueId2DelayLevel
(
delayLevel
);
assertThat
(
queueId
).
isEqualTo
(
delayLevel
+
1
);
}
@Test
public
void
deliverDelayedMessageTimerTaskTest
()
throws
InterruptedException
{
MessageExtBrokerInner
msg
=
buildMessage
();
// set delayLevel,and send delay message
msg
.
setDelayTimeLevel
(
delayLevel
);
PutMessageResult
result
=
messageStore
.
putMessage
(
msg
);
assertThat
(
result
.
isOk
()).
isTrue
();
// consumer message
Long
offset
=
result
.
getAppendMessageResult
().
getLogicsOffset
();
String
messageGroup
=
"delayGroupTest"
;
GetMessageResult
messageResult
=
messageStore
.
getMessage
(
messageGroup
,
msg
.
getTopic
(),
msg
.
getQueueId
(),
offset
,
1
,
null
);
// now, no message in queue,must wait > 5 seconds
assertThat
(
messageResult
.
getStatus
()).
isEqualTo
(
GetMessageStatus
.
NO_MESSAGE_IN_QUEUE
);
TimeUnit
.
SECONDS
.
sleep
(
6
);
messageResult
=
messageStore
.
getMessage
(
messageGroup
,
msg
.
getTopic
(),
msg
.
getQueueId
(),
offset
,
1
,
null
);
// now,found the message
assertThat
(
messageResult
.
getStatus
()).
isEqualTo
(
GetMessageStatus
.
FOUND
);
// get the message body
ByteBuffer
byteBuffer
=
ByteBuffer
.
allocate
(
messageResult
.
getBufferTotalSize
());
List
<
ByteBuffer
>
byteBufferList
=
messageResult
.
getMessageBufferList
();
for
(
ByteBuffer
bb
:
byteBufferList
)
{
byteBuffer
.
put
(
bb
);
}
// warp and decode the message
byteBuffer
=
ByteBuffer
.
wrap
(
byteBuffer
.
array
());
List
<
MessageExt
>
msgList
=
MessageDecoder
.
decodes
(
byteBuffer
);
String
retryMsg
=
new
String
(
msgList
.
get
(
0
).
getBody
());
assertThat
(
sendMessage
).
isEqualTo
(
retryMsg
);
// add mapFile release
messageResult
.
release
();
}
@Test
public
void
persist
(){
// because of the method will wait 10s
scheduleMessageService
.
persist
();
}
@After
public
void
shutdown
()
throws
InterruptedException
{
TimeUnit
.
SECONDS
.
sleep
(
1
);
scheduleMessageService
.
shutdown
();
messageStore
.
shutdown
();
messageStore
.
destroy
();
File
file
=
new
File
(
messageStoreConfig
.
getStorePathRootDir
());
UtilAll
.
deleteFile
(
file
);
}
public
MessageExtBrokerInner
buildMessage
()
{
byte
[]
msgBody
=
sendMessage
.
getBytes
();
MessageExtBrokerInner
msg
=
new
MessageExtBrokerInner
();
msg
.
setTopic
(
"schedule_topic_test"
);
msg
.
setTags
(
"schedule_tag"
);
msg
.
setKeys
(
"schedule_key"
);
msg
.
setBody
(
msgBody
);
msg
.
setQueueId
(
0
);
msg
.
setSysFlag
(
0
);
msg
.
setBornTimestamp
(
System
.
currentTimeMillis
());
msg
.
setStoreHost
(
storeHost
);
msg
.
setBornHost
(
bornHost
);
return
msg
;
}
private
class
MyMessageArrivingListener
implements
MessageArrivingListener
{
@Override
public
void
arriving
(
String
topic
,
int
queueId
,
long
logicOffset
,
long
tagsCode
,
long
msgStoreTime
,
byte
[]
filterBitMap
,
Map
<
String
,
String
>
properties
)
{
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录