InDockerTests.java 3.11 KB
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"));
    }
}