test environment for docker

This commit is contained in:
Devaev Maxim 2018-07-08 06:28:12 +00:00
parent b1d72e8663
commit 41ce7ff286
7 changed files with 172 additions and 18 deletions

View File

@ -1,8 +1,37 @@
TESTENV_IMAGE ?= kvmd-testenv
TESTENV_VIDEO ?= /dev/video0
TESTENV_LOOP ?= /dev/loop7
TESTENV_CMD ?= /bin/bash -c " \
ln -s $(TESTENV_VIDEO) /dev/kvmd-streamer \
&& (losetup -d /dev/kvmd-msd || true) \
&& losetup /dev/kvmd-msd /root/loop.img \
&& python -m kvmd -c testenv/kvmd.yaml \
"
# =====
all:
cat Makefile
bencoder:
python3 setup.py build_ext --inplace
run:
docker build --rm --tag $(TESTENV_IMAGE) -f testenv/Dockerfile .
- docker run --rm \
--volume `pwd`/kvmd:/kvmd:ro \
--volume `pwd`/web:/web:ro \
--volume `pwd`/testenv:/testenv:ro \
--device $(TESTENV_LOOP):/dev/kvmd-msd \
--device $(TESTENV_VIDEO):$(TESTENV_VIDEO) \
--publish 8080:8080/tcp \
--publish 8081:8081/tcp \
--publish 8082:8082/tcp \
-it $(TESTENV_IMAGE) $(TESTENV_CMD)
- docker run --rm --device=$(TESTENV_LOOP):/dev/kvmd-msd -it $(TESTENV_IMAGE) losetup -d /dev/kvmd-msd
shell:
make run TESTENV_CMD=/bin/bash
release:
make clean
@ -13,19 +42,24 @@ release:
make push
make clean
tox:
tox
bump:
bumpversion minor
push:
git push
git push --tags
clean:
rm -rf build site dist pkg src *.egg-info kvmd-*.tar.gz
find -name __pycache__ | xargs rm -rf
clean-all: clean
rm -rf .tox .mypy_cache

View File

@ -10,7 +10,7 @@ import yaml
# =====
def init() -> Dict:
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--config", default="kvmd.yaml", metavar="<path>")
parser.add_argument("-c", "--config", required=True, metavar="<path>")
options = parser.parse_args()
with open(options.config) as config_file:

View File

@ -50,11 +50,12 @@ class IsBusyError(MassStorageError):
class MassStorageDeviceInfo(NamedTuple):
path: str
real: str
size: int
manufacturer: str
product: str
serial: str
image_name: str
manufacturer: str = ""
product: str = ""
serial: str = ""
_DISK_META_SIZE = 4096
@ -101,15 +102,15 @@ def explore_device(path: str) -> Optional[MassStorageDeviceInfo]:
# udevadm info -a -p $(udevadm info -q path -n /dev/sda)
ctx = pyudev.Context()
block_device = pyudev.Devices.from_device_file(ctx, path)
device = pyudev.Devices.from_device_file(ctx, path)
if device.subsystem != "block":
return None
try:
size = block_device.attributes.asint("size") * 512
size = device.attributes.asint("size") * 512
except KeyError:
return None
usb_device = block_device.find_parent("usb", "usb_device")
if not usb_device:
return None
usb_device = device.find_parent("usb", "usb_device")
with open(path, "rb") as device_file:
device_file.seek(size - _DISK_META_SIZE)
@ -117,11 +118,14 @@ def explore_device(path: str) -> Optional[MassStorageDeviceInfo]:
return MassStorageDeviceInfo(
path=path,
real=(os.readlink(path) if os.path.islink(path) else ""),
size=size,
manufacturer=usb_device.attributes.asstring("manufacturer").strip(),
product=usb_device.attributes.asstring("product").strip(),
serial=usb_device.attributes.asstring("serial").strip(),
image_name=disk_meta["image_name"],
**{
attr: usb_device.attributes.asstring(attr).strip()
for attr in ["manufacturer", "product", "serial"]
if usb_device
},
)

43
kvmd/testenv/Dockerfile Normal file
View File

@ -0,0 +1,43 @@
FROM base/archlinux
RUN pacman -Syu --noconfirm \
&& pacman -S --noconfirm \
git \
patch \
make \
fakeroot \
binutils \
expac \
jshon \
sudo \
&& pacman -Sc --noconfirm
RUN useradd -r -d / packer \
&& cd /tmp \
&& sudo -u packer git clone https://aur.archlinux.org/packer-color.git \
&& cd packer-color \
&& sudo -u packer makepkg \
&& pacman --noconfirm -U packer-color-*.pkg.tar.xz \
&& ln -s /usr/bin/packer-color /usr/local/bin/packer \
&& cp /usr/bin/packer-color /usr/local/bin/user-packer \
&& sed -i -e "s|makepkg \$MAKEPKGOPTS |chown -R packer:packer \$dir; makepkg \$MAKEPKGOPTS |g" \
/usr/local/bin/user-packer \
&& sed -i -e "s|makepkg \$MAKEPKGOPTS --asroot -f|sudo -u packer makepkg \$MAKEPKGOPTS -f|g" \
/usr/local/bin/user-packer \
&& cd - \
&& rm -rf /tmp/packer-color
RUN pacman -Syy \
&& user-packer -S --noconfirm \
python \
python-pip \
nginx \
mjpg-streamer-pikvm \
&& pacman -Sc --noconfirm
COPY testenv/requirements.txt requirements.txt
RUN pip install -r requirements.txt
RUN dd if=/dev/zero of=/root/loop.img bs=1024 count=1048576
CMD /bin/bash

73
kvmd/testenv/kvmd.yaml Normal file
View File

@ -0,0 +1,73 @@
kvmd:
server:
host: 0.0.0.0
port: 8081
heartbeat: 3.0
keyboard:
pinout:
clock: 17
data: 4
pulse: 0.0002
atx:
pinout:
power_led: 16
hdd_led: 12
power_switch: 26
reset_switch: 20
click_delay: 0.1
long_click_delay: 5.5
state_poll: 0.1
msd:
device: "/dev/kvmd-msd"
init_delay: 2.0
write_meta: true
chunk_size: 8192
streamer:
pinout:
cap: 21
conv: 25
sync_delay: 1.0
init_delay: 1.0
shutdown_delay: 10.0
size:
width: 720
height: 576
cmd:
- "/usr/bin/mjpg_streamer"
- "-i"
- "input_uvc.so -d /dev/kvmd-streamer -e 2 -y -n -r {width}x{height}"
- "-o"
- "output_http.so -l 0.0.0.0 -p 8082"
logging:
version: 1
disable_existing_loggers: false
formatters:
console:
(): logging.Formatter
style: "{"
datefmt: "%H:%M:%S"
format: "[{asctime}] {name:20.20} {levelname:>7} --- {message}"
handlers:
console:
level: DEBUG
class: logging.StreamHandler
stream: ext://sys.stdout
formatter: console
root:
level: INFO
handlers:
- console

View File

@ -10,25 +10,25 @@ commands = flake8 kvmd
deps =
flake8
flake8-double-quotes
-rdev_requirements.txt
-rtestenv/requirements.txt
[testenv:pylint]
commands = pylint --output-format=colorized --reports=no kvmd
deps =
pylint
-rdev_requirements.txt
-rtestenv/requirements.txt
[testenv:mypy]
commands = mypy kvmd
deps =
mypy
-rdev_requirements.txt
-rtestenv/requirements.txt
[testenv:vulture]
commands = vulture kvmd
deps =
vulture
-rdev_requirements.txt
-rtestenv/requirements.txt
[flake8]
max-line-length = 160