1+ /*
2+ * Copyright 1999-2019 Seata.io Group.
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+
17+ package io .seata .config ;
18+
19+ import io .seata .common .exception .ShouldNeverHappenException ;
20+ import io .seata .common .util .ReflectionUtil ;
21+ import org .junit .jupiter .api .Assertions ;
22+ import org .junit .jupiter .api .Test ;
23+ import org .mockito .Mockito ;
24+ import org .mockito .internal .util .reflection .FieldSetter ;
25+
26+ import java .lang .reflect .Field ;
27+ import java .util .concurrent .CompletableFuture ;
28+ import java .util .concurrent .ExecutionException ;
29+ import java .util .concurrent .TimeoutException ;
30+
31+ /**
32+ * @author liuqiufeng
33+ */
34+ class ConfigFutureTest {
35+
36+
37+ @ Test
38+ void testGet () throws NoSuchFieldException , IllegalAccessException , ExecutionException , InterruptedException , TimeoutException {
39+ // mainly test exception scene
40+ ConfigFuture configFuture = Mockito .spy (new ConfigFuture ("file.conf" , "defaultValue" , ConfigFuture .ConfigOperation .GET ));
41+
42+ Field originField = ReflectionUtil .getField (ConfigFuture .class , "origin" );
43+ CompletableFuture <Object > origin = (CompletableFuture <Object >) originField .get (configFuture );
44+ // mock field
45+ origin = Mockito .spy (origin );
46+ // set mocked field to object
47+ FieldSetter .setField (configFuture , originField , origin );
48+
49+ Mockito .doThrow (ExecutionException .class ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
50+ Assertions .assertThrows (ShouldNeverHappenException .class , configFuture ::get );
51+
52+ Mockito .doThrow (TimeoutException .class ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
53+ Assertions .assertEquals ("defaultValue" , configFuture .get ());
54+
55+ Mockito .doThrow (InterruptedException .class ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
56+ Assertions .assertEquals ("defaultValue" , configFuture .get ());
57+
58+ Mockito .doReturn (null ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
59+ Assertions .assertEquals ("defaultValue" , configFuture .get ());
60+
61+
62+ // set another config operation
63+ configFuture .setOperation (ConfigFuture .ConfigOperation .PUT );
64+
65+ Mockito .doThrow (ExecutionException .class ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
66+ Assertions .assertThrows (ShouldNeverHappenException .class , configFuture ::get );
67+
68+ Mockito .doThrow (TimeoutException .class ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
69+ Assertions .assertEquals (Boolean .FALSE , configFuture .get ());
70+
71+ Mockito .doThrow (InterruptedException .class ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
72+ Assertions .assertEquals (Boolean .FALSE , configFuture .get ());
73+
74+ Mockito .doReturn (null ).when (origin ).get (Mockito .anyLong (), Mockito .any ());
75+ Assertions .assertEquals (Boolean .FALSE , configFuture .get ());
76+ }
77+
78+ @ Test
79+ void setDataId () {
80+ ConfigFuture configFuture = new ConfigFuture ("file.conf" , "defaultValue" , ConfigFuture .ConfigOperation .GET );
81+ Assertions .assertEquals ("file.conf" , configFuture .getDataId ());
82+ configFuture .setDataId ("file-test.conf" );
83+ Assertions .assertEquals ("file-test.conf" , configFuture .getDataId ());
84+ }
85+
86+ @ Test
87+ void setContent () {
88+ ConfigFuture configFuture = new ConfigFuture ("file.conf" , "defaultValue" , ConfigFuture .ConfigOperation .GET );
89+ Assertions .assertEquals ("defaultValue" , configFuture .getContent ());
90+ configFuture .setContent ("testValue" );
91+ Assertions .assertEquals ("testValue" , configFuture .getContent ());
92+ }
93+ }
0 commit comments