Skip to content

Commit 493786b

Browse files
committed
add the test unit
1 parent a28e337 commit 493786b

File tree

4 files changed

+216
-2
lines changed

4 files changed

+216
-2
lines changed

framework/src/main/java/org/tron/core/config/args/WitnessInitializer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@ public class WitnessInitializer {
2626

2727
public WitnessInitializer(Config config) {
2828
this.config = config;
29+
this.localWitnesses = new LocalWitnesses();
2930
}
3031

3132
public LocalWitnesses initLocalWitnesses() {
32-
localWitnesses = new LocalWitnesses();
33-
3433
if (!Args.PARAMETER.isWitness()) {
3534
return localWitnesses;
3635
}

framework/src/test/java/org/tron/common/crypto/ECKeyTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static org.junit.Assert.assertFalse;
66
import static org.junit.Assert.assertNotEquals;
77
import static org.junit.Assert.assertNotNull;
8+
import static org.junit.Assert.assertNull;
89
import static org.junit.Assert.assertTrue;
910
import static org.junit.Assert.fail;
1011
import static org.tron.common.utils.client.utils.AbiUtil.generateOccupationConstantPrivateKey;
@@ -67,6 +68,11 @@ public void testFromPrivateKey() {
6768
assertTrue(key.isPubKeyCanonical());
6869
assertTrue(key.hasPrivKey());
6970
assertArrayEquals(pubKey, key.getPubKey());
71+
72+
key = ECKey.fromPrivate((byte[]) null);
73+
assertNull(key);
74+
key = ECKey.fromPrivate(new byte[0]);
75+
assertNull(key);
7076
}
7177

7278
@Test(expected = IllegalArgumentException.class)

framework/src/test/java/org/tron/common/crypto/SM2KeyTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.junit.Assert.assertEquals;
55
import static org.junit.Assert.assertFalse;
66
import static org.junit.Assert.assertNotNull;
7+
import static org.junit.Assert.assertNull;
78
import static org.junit.Assert.assertTrue;
89
import static org.junit.Assert.fail;
910
import static org.tron.common.utils.client.utils.AbiUtil.generateOccupationConstantPrivateKey;
@@ -64,6 +65,11 @@ public void testFromPrivateKey() {
6465
assertTrue(key.isPubKeyCanonical());
6566
assertTrue(key.hasPrivKey());
6667
assertArrayEquals(pubKey, key.getPubKey());
68+
69+
key = SM2.fromPrivate((byte[]) null);
70+
assertNull(key);
71+
key = SM2.fromPrivate(new byte[0]);
72+
assertNull(key);
6773
}
6874

6975
@Test(expected = IllegalArgumentException.class)
Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
package org.tron.core.config.args;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertNotNull;
6+
import static org.junit.Assert.assertNull;
7+
import static org.junit.Assert.assertThrows;
8+
import static org.junit.Assert.assertTrue;
9+
10+
import com.typesafe.config.Config;
11+
import com.typesafe.config.ConfigFactory;
12+
import java.lang.reflect.Field;
13+
import java.lang.reflect.InvocationTargetException;
14+
import java.lang.reflect.Method;
15+
import org.junit.After;
16+
import org.junit.Before;
17+
import org.junit.Test;
18+
import org.tron.common.parameter.CommonParameter;
19+
import org.tron.common.utils.ByteArray;
20+
import org.tron.common.utils.LocalWitnesses;
21+
import org.tron.common.utils.PublicMethod;
22+
import org.tron.common.utils.client.utils.Base58;
23+
import org.tron.core.exception.TronError;
24+
import org.tron.core.exception.TronError.ErrCode;
25+
26+
public class WitnessInitializerTest {
27+
28+
private Config config;
29+
private WitnessInitializer witnessInitializer;
30+
31+
private static final String privateKey = PublicMethod.getRandomPrivateKey();
32+
private static final String address = Base58.encode58Check(
33+
ByteArray.fromHexString(PublicMethod.getHexAddressByPrivateKey(privateKey)));
34+
private static final String invalidAddress = "RJCzdnv88Hvqa2jB1C9dMmMYHr5DFdF2R3";
35+
36+
@Before
37+
public void setUp() {
38+
config = ConfigFactory.empty();
39+
witnessInitializer = new WitnessInitializer(config);
40+
}
41+
42+
@After
43+
public void clear() {
44+
Args.clearParam();
45+
}
46+
47+
@Test
48+
public void testInitLocalWitnessesEmpty() {
49+
Args.PARAMETER.setWitness(false);
50+
51+
LocalWitnesses result = witnessInitializer.initLocalWitnesses();
52+
assertNotNull(result);
53+
assertTrue(result.getPrivateKeys().isEmpty());
54+
55+
Args.PARAMETER.setWitness(true);
56+
LocalWitnesses localWitnesses = witnessInitializer.initLocalWitnesses();
57+
assertTrue(localWitnesses.getPrivateKeys().isEmpty());
58+
59+
String configString = "localwitness = [] \n localwitnesskeystore = []";
60+
config = ConfigFactory.parseString(configString);
61+
witnessInitializer = new WitnessInitializer(config);
62+
localWitnesses = witnessInitializer.initLocalWitnesses();
63+
assertTrue(localWitnesses.getPrivateKeys().isEmpty());
64+
}
65+
66+
@Test
67+
public void testTryInitFromCommandLine()
68+
throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException,
69+
InvocationTargetException {
70+
Field privateKeyField = CommonParameter.class.getDeclaredField("privateKey");
71+
privateKeyField.setAccessible(true);
72+
privateKeyField.set(Args.getInstance(), "");
73+
74+
witnessInitializer = new WitnessInitializer(config);
75+
Method method = WitnessInitializer.class.getDeclaredMethod(
76+
"tryInitFromCommandLine");
77+
method.setAccessible(true);
78+
boolean result = (boolean) method.invoke(witnessInitializer);
79+
assertFalse(result);
80+
81+
privateKeyField.set(Args.getInstance(), privateKey);
82+
method.invoke(witnessInitializer);
83+
result = (boolean) method.invoke(witnessInitializer);
84+
assertTrue(result);
85+
86+
Field witnessAddress = CommonParameter.class.getDeclaredField("witnessAddress");
87+
witnessAddress.setAccessible(true);
88+
witnessAddress.set(Args.getInstance(), address);
89+
result = (boolean) method.invoke(witnessInitializer);
90+
assertTrue(result);
91+
92+
witnessAddress.set(Args.getInstance(), invalidAddress);
93+
InvocationTargetException thrown = assertThrows(InvocationTargetException.class,
94+
() -> method.invoke(witnessInitializer));
95+
TronError targetException = (TronError) thrown.getTargetException();
96+
assertEquals(ErrCode.WITNESS_INIT, targetException.getErrCode());
97+
}
98+
99+
@Test
100+
public void testTryInitFromConfig()
101+
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
102+
witnessInitializer = new WitnessInitializer(config);
103+
Method method = WitnessInitializer.class.getDeclaredMethod(
104+
"tryInitFromConfig");
105+
method.setAccessible(true);
106+
boolean result = (boolean) method.invoke(witnessInitializer);
107+
assertFalse(result);
108+
109+
String configString = "localwitness = []";
110+
config = ConfigFactory.parseString(configString);
111+
witnessInitializer = new WitnessInitializer(config);
112+
result = (boolean) method.invoke(witnessInitializer);
113+
assertFalse(result);
114+
115+
configString = "localwitness = [" + privateKey + "]";
116+
config = ConfigFactory.parseString(configString);
117+
witnessInitializer = new WitnessInitializer(config);
118+
result = (boolean) method.invoke(witnessInitializer);
119+
assertTrue(result);
120+
121+
configString = "localWitnessAccountAddress = " + address + "\n"
122+
+ "localwitness = [\n" + privateKey + "]";
123+
config = ConfigFactory.parseString(configString);
124+
witnessInitializer = new WitnessInitializer(config);
125+
result = (boolean) method.invoke(witnessInitializer);
126+
assertTrue(result);
127+
128+
configString = "localwitness = [\n" + privateKey + "\n" + privateKey + "]";
129+
config = ConfigFactory.parseString(configString);
130+
witnessInitializer = new WitnessInitializer(config);
131+
result = (boolean) method.invoke(witnessInitializer);
132+
assertTrue(result);
133+
134+
configString = "localWitnessAccountAddress = " + invalidAddress + "\n"
135+
+ "localwitness = [\n" + privateKey + "]";
136+
config = ConfigFactory.parseString(configString);
137+
witnessInitializer = new WitnessInitializer(config);
138+
InvocationTargetException thrown = assertThrows(InvocationTargetException.class,
139+
() -> method.invoke(witnessInitializer));
140+
TronError targetException = (TronError) thrown.getTargetException();
141+
assertEquals(ErrCode.WITNESS_INIT, targetException.getErrCode());
142+
143+
configString = "localWitnessAccountAddress = " + address + "\n"
144+
+ "localwitness = [\n" + privateKey + "\n" + privateKey + "]";
145+
config = ConfigFactory.parseString(configString);
146+
witnessInitializer = new WitnessInitializer(config);
147+
thrown = assertThrows(InvocationTargetException.class,
148+
() -> method.invoke(witnessInitializer));
149+
targetException = (TronError) thrown.getTargetException();
150+
assertEquals(ErrCode.WITNESS_INIT, targetException.getErrCode());
151+
}
152+
153+
@Test
154+
public void testTryInitFromKeystore()
155+
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException,
156+
NoSuchFieldException {
157+
witnessInitializer = new WitnessInitializer(config);
158+
Method method = WitnessInitializer.class.getDeclaredMethod(
159+
"tryInitFromKeystore");
160+
method.setAccessible(true);
161+
method.invoke(witnessInitializer);
162+
Field localWitnessField = WitnessInitializer.class.getDeclaredField("localWitnesses");
163+
localWitnessField.setAccessible(true);
164+
LocalWitnesses localWitnesses = (LocalWitnesses) localWitnessField.get(witnessInitializer);
165+
assertTrue(localWitnesses.getPrivateKeys().isEmpty());
166+
167+
String configString = "localwitnesskeystore = []";
168+
Config emptyListConfig = ConfigFactory.parseString(configString);
169+
witnessInitializer = new WitnessInitializer(emptyListConfig);
170+
method.invoke(witnessInitializer);
171+
localWitnesses = (LocalWitnesses) localWitnessField.get(witnessInitializer);
172+
assertTrue(localWitnesses.getPrivateKeys().isEmpty());
173+
}
174+
175+
@Test
176+
public void testGetWitnessAddress()
177+
throws InvocationTargetException, IllegalAccessException, NoSuchMethodException,
178+
NoSuchFieldException {
179+
witnessInitializer = new WitnessInitializer(config);
180+
Method method = WitnessInitializer.class.getDeclaredMethod(
181+
"getWitnessAddress");
182+
method.setAccessible(true);
183+
byte[] result = (byte[]) method.invoke(witnessInitializer);
184+
assertNull(result);
185+
186+
String configString = "localWitnessAccountAddress = " + address;
187+
config = ConfigFactory.parseString(configString);
188+
witnessInitializer = new WitnessInitializer(config);
189+
Field localWitnessField = WitnessInitializer.class.getDeclaredField("localWitnesses");
190+
localWitnessField.setAccessible(true);
191+
localWitnessField.set(witnessInitializer, new LocalWitnesses(privateKey));
192+
result = (byte[]) method.invoke(witnessInitializer);
193+
assertNotNull(result);
194+
195+
configString = "localWitnessAccountAddress = " + invalidAddress;
196+
config = ConfigFactory.parseString(configString);
197+
witnessInitializer = new WitnessInitializer(config);
198+
InvocationTargetException thrown = assertThrows(InvocationTargetException.class,
199+
() -> method.invoke(witnessInitializer));
200+
TronError targetException = (TronError) thrown.getTargetException();
201+
assertEquals(ErrCode.WITNESS_INIT, targetException.getErrCode());
202+
}
203+
}

0 commit comments

Comments
 (0)