Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Apache RocketMQ
Rocketmq
提交
98e4631a
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看板
提交
98e4631a
编写于
1月 17, 2017
作者:
Y
yukon
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ROCKETMQ-52] Add unit tests for RemoteBrokerOffsetStore
上级
127b163d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
141 addition
and
0 deletion
+141
-0
client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
...mq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
+141
-0
未找到文件。
client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
0 → 100644
浏览文件 @
98e4631a
/*
* 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.client.consumer.store
;
import
java.util.Collections
;
import
java.util.HashSet
;
import
org.apache.rocketmq.client.ClientConfig
;
import
org.apache.rocketmq.client.exception.MQBrokerException
;
import
org.apache.rocketmq.client.impl.FindBrokerResult
;
import
org.apache.rocketmq.client.impl.MQClientAPIImpl
;
import
org.apache.rocketmq.client.impl.factory.MQClientInstance
;
import
org.apache.rocketmq.common.message.MessageQueue
;
import
org.apache.rocketmq.common.protocol.header.QueryConsumerOffsetRequestHeader
;
import
org.apache.rocketmq.common.protocol.header.UpdateConsumerOffsetRequestHeader
;
import
org.apache.rocketmq.remoting.exception.RemotingException
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
org.mockito.Mock
;
import
org.mockito.invocation.InvocationOnMock
;
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
.
ArgumentMatchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.
doAnswer
;
import
static
org
.
mockito
.
Mockito
.
doThrow
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
when
;
public
class
RemoteBrokerOffsetStoreTest
{
@Mock
private
static
MQClientInstance
mQClientFactory
;
@Mock
private
static
MQClientAPIImpl
mqClientAPI
;
private
static
String
group
=
"FooBarGroup"
;
private
static
String
topic
=
"FooBar"
;
private
static
String
brokerName
=
"DefaultBrokerName"
;
@BeforeClass
public
static
void
init
()
{
System
.
setProperty
(
"rocketmq.client.localOffsetStoreDir"
,
System
.
getProperty
(
"java.io.tmpdir"
)
+
".rocketmq_offsets"
);
mQClientFactory
=
mock
(
MQClientInstance
.
class
);
String
clientId
=
new
ClientConfig
().
buildMQClientId
()
+
"#TestNamespace"
+
System
.
currentTimeMillis
();
when
(
mQClientFactory
.
getClientId
()).
thenReturn
(
clientId
);
when
(
mQClientFactory
.
findBrokerAddressInAdmin
(
brokerName
)).
thenReturn
(
new
FindBrokerResult
(
"127.0.0.1"
,
false
));
mqClientAPI
=
mock
(
MQClientAPIImpl
.
class
);
when
(
mQClientFactory
.
getMQClientAPIImpl
()).
thenReturn
(
mqClientAPI
);
}
@Test
public
void
testUpdateOffset
()
throws
Exception
{
OffsetStore
offsetStore
=
new
RemoteBrokerOffsetStore
(
mQClientFactory
,
group
);
MessageQueue
messageQueue
=
new
MessageQueue
(
topic
,
brokerName
,
1
);
offsetStore
.
updateOffset
(
messageQueue
,
1024
,
false
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_MEMORY
)).
isEqualTo
(
1024
);
offsetStore
.
updateOffset
(
messageQueue
,
1023
,
false
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_MEMORY
)).
isEqualTo
(
1023
);
offsetStore
.
updateOffset
(
messageQueue
,
1022
,
true
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_MEMORY
)).
isEqualTo
(
1023
);
}
@Test
public
void
testReadOffset_WithException
()
throws
Exception
{
OffsetStore
offsetStore
=
new
RemoteBrokerOffsetStore
(
mQClientFactory
,
group
);
MessageQueue
messageQueue
=
new
MessageQueue
(
topic
,
brokerName
,
2
);
offsetStore
.
updateOffset
(
messageQueue
,
1024
,
false
);
doThrow
(
new
MQBrokerException
(-
1
,
""
))
.
when
(
mqClientAPI
).
queryConsumerOffset
(
anyString
(),
any
(
QueryConsumerOffsetRequestHeader
.
class
),
anyLong
());
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_STORE
)).
isEqualTo
(-
1
);
doThrow
(
new
RemotingException
(
""
,
null
))
.
when
(
mqClientAPI
).
queryConsumerOffset
(
anyString
(),
any
(
QueryConsumerOffsetRequestHeader
.
class
),
anyLong
());
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_STORE
)).
isEqualTo
(-
2
);
}
@Test
public
void
testReadOffset_Success
()
throws
Exception
{
OffsetStore
offsetStore
=
new
RemoteBrokerOffsetStore
(
mQClientFactory
,
group
);
final
MessageQueue
messageQueue
=
new
MessageQueue
(
topic
,
brokerName
,
3
);
doAnswer
(
new
Answer
()
{
@Override
public
Object
answer
(
InvocationOnMock
mock
)
throws
Throwable
{
UpdateConsumerOffsetRequestHeader
updateRequestHeader
=
mock
.
getArgument
(
1
);
when
(
mqClientAPI
.
queryConsumerOffset
(
anyString
(),
any
(
QueryConsumerOffsetRequestHeader
.
class
),
anyLong
())).
thenReturn
(
updateRequestHeader
.
getCommitOffset
());
return
null
;
}
}).
when
(
mqClientAPI
).
updateConsumerOffsetOneway
(
any
(
String
.
class
),
any
(
UpdateConsumerOffsetRequestHeader
.
class
),
any
(
Long
.
class
));
offsetStore
.
updateOffset
(
messageQueue
,
1024
,
false
);
offsetStore
.
persist
(
messageQueue
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_STORE
)).
isEqualTo
(
1024
);
offsetStore
.
updateOffset
(
messageQueue
,
1023
,
false
);
offsetStore
.
persist
(
messageQueue
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_STORE
)).
isEqualTo
(
1023
);
offsetStore
.
updateOffset
(
messageQueue
,
1022
,
true
);
offsetStore
.
persist
(
messageQueue
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_STORE
)).
isEqualTo
(
1023
);
offsetStore
.
updateOffset
(
messageQueue
,
1025
,
false
);
offsetStore
.
persistAll
(
new
HashSet
<>(
Collections
.
singletonList
(
messageQueue
)));
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_STORE
)).
isEqualTo
(
1025
);
}
@Test
public
void
testRemoveOffset
()
throws
Exception
{
OffsetStore
offsetStore
=
new
RemoteBrokerOffsetStore
(
mQClientFactory
,
group
);
final
MessageQueue
messageQueue
=
new
MessageQueue
(
topic
,
brokerName
,
4
);
offsetStore
.
updateOffset
(
messageQueue
,
1024
,
false
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_MEMORY
)).
isEqualTo
(
1024
);
offsetStore
.
removeOffset
(
messageQueue
);
assertThat
(
offsetStore
.
readOffset
(
messageQueue
,
ReadOffsetType
.
READ_FROM_MEMORY
)).
isEqualTo
(-
1
);
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录