1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package top.ninwoo.edgecenter;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import top.ninwoo.utils.entity.DockerContainer;
import top.ninwoo.utils.service.DockerService;
import top.ninwoo.utils.service.OVSService;
import top.ninwoo.utils.service.OvsDockerService;
/**
* 测试嵌入式Docker的服务接口
* @Author joliu
* @Description
* @Date Create in 下午8:41 2019/10/28
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class InDockerTests {
@Autowired
DockerService dockerService;
@Autowired
OVSService ovsService;
@Autowired
OvsDockerService ovsDockerService;
DockerContainer dockerContainer1 = null;
DockerContainer dockerContainer2 = null;
private final String bridgeName = "testbr";
/**
* 构建两个docker
*/
@Before
public void init() {
// 创建两个Docker
dockerContainer1 = new DockerContainer();
dockerContainer1.setName("RouterTestIn1");
dockerContainer1.setImage("joliu/networktest");
dockerContainer1.setCommand("sh");
dockerContainer1 = dockerService.runDocker(dockerContainer1);
dockerContainer2 = new DockerContainer();
dockerContainer2.setName("RouterTestIn2");
dockerContainer2.setImage("joliu/networktest");
dockerContainer2.setCommand("sh");
dockerContainer2 = dockerService.runDocker(dockerContainer2);
// 创建一个ovs网桥
if(ovsService.isBridge(bridgeName)) {
ovsService.delBridge(bridgeName);
}
ovsService.addBridge(bridgeName);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 绑定两个Docker的网卡到ovs网桥上
ovsDockerService.addPort(bridgeName, "eth1", dockerContainer1.getId(), "10.1.100.2/24");
ovsDockerService.addPort(bridgeName, "eth1", dockerContainer2.getId(), "10.1.100.3/24");
}
@Test
public void testInDocker() {
String result = "";
// 网络联通测试
result = dockerService.execInDocker(dockerContainer1.getId(), new String[]{"ping", "10.1.100.3", "-c", "2"});
System.out.println(result);
// 使用Iptables进行端口限制
result = dockerService.execInDocker(dockerContainer1.getId(), new String[]{"iptables", "-I", "INPUT", "-s", "10.1.100.3", "-j", "DROP"});
System.out.println(result);
// 测试网络
result = dockerService.execInDocker(dockerContainer1.getId(), new String[]{"ping", "10.1.100.3", "-c", "2"});
System.out.println(result);
}
@After
public void close() {
// 清除Docker
Assert.assertTrue(dockerService.deleteDockerById("RouterTestIn1"));
Assert.assertTrue(dockerService.deleteDockerById("RouterTestIn2"));
Assert.assertTrue(ovsService.delBridge("testbr"));
}
}