$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib')) require 'test/unit' require 'tempfile' require 'lxc' class TestLXCRunning < Test::Unit::TestCase def setup if Process::Sys::geteuid != 0 raise 'This test must be ran as root' end @name = 'test' @container = LXC::Container.new(@name) @container.create('ubuntu') unless @container.defined? @container.start end def teardown begin @container.shutdown(3) rescue LXC::Error if @container.running? @container.stop @container.wait(:stopped, 3) end end assert(!@container.running?) end def test_container_running @container.wait(:running, 3) assert(@container.init_pid > 1) assert(@container.running?) assert_equal(:running, @container.state) end def test_container_config_item key = 'lxc.network.0.type' assert_equal('veth', @container.running_config_item(key)) end def test_container_interfaces assert_equal(['eth0', 'lo'], @container.interfaces.sort) end def test_container_ip_addresses ips = nil 10.times do ips = @container.ip_addresses break unless ips.empty? sleep 1 end assert(ips.length > 0) path = "/tmp/tc_lxc_running_ifconfig_eth0.#{Process.pid}" file = File.open(path, 'w+') begin opts = { :wait => true, :stdout => file, :namespaces => LXC::CLONE_NEWNET | LXC::CLONE_NEWUTS, } @container.attach(opts) do LXC.run_command('ifconfig eth0') end file.rewind assert_match(/^eth0\s+Link\sencap:Ethernet\s+HWaddr\s/, file.readline) ensure file.close File.unlink(path) end end def test_container_cgroups max_mem = @container.cgroup_item('memory.max_usage_in_bytes') cur_lim = @container.cgroup_item('memory.limit_in_bytes') assert_nothing_raised(LXC::Error) do @container.set_cgroup_item('memory.limit_in_bytes', max_mem) end assert_not_equal(cur_lim, @container.cgroup_item('memory.limit_in_bytes')) end def test_container_freeze @container.freeze @container.wait(:frozen, 3) assert(@container.init_pid > 1) assert(@container.running?) assert_equal(:frozen, @container.state) @container.unfreeze @container.wait(:running, 3) assert(@container.init_pid > 1) assert(@container.running?) assert_equal(:running, @container.state) end def test_container_clone teardown assert_nil(@container.init_pid) assert(!@container.running?) assert_equal(:stopped, @container.state) assert_nothing_raised do begin clone = @container.clone('test_clone') clone.start clone.stop ensure clone.destroy end end end def test_container_listed containers = LXC.list_containers assert(containers.length > 0) assert(containers.include?(@name)) end end