# Copyright (c) 2016 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

QEMU is used for VPP-VM testing enviroment. You need to run qemu-2.2.1 or newer
in order to Vhos-user support. In CSIT VIRL setup DUT has preinstalled QEMU and
have small VM image "/var/lib/vm/vhost-nested.img". QEMU binary path must
be "/opt/qemu/bin/qemu-system-x86_64". You can use following script to replicate
QEMU setup on DUT "resources/libraries/bash/qemu_build.sh" for local testing,
out of LF's VM setup. VM image must have installed at least qemu-guest-agent,
sshd, bridge-utils and VirtIO support. Note that VPP must be installed before
starting QEMU, because VPP will do the hugepages configuration as part of it's
installation process. Username/password for the VM must be cisco/cisco and
NOPASSWD sudo access. The interface naming is based on driver (management
interface type is Intel E1000), all E1000 interfaces will be named mgmt<n> and
all VirtIO interfaces will be named virtio<n>. In VM
"/etc/init.d/qemu-guest-agent" you must set "TRANSPORT=isa-serial:/dev/ttyS1"
because ttyS0 is used by serial console and ttyS1 is dedicated for
qemu-guest-agent in QEMU setup.
There is python library for QEMU setup, start and some utilities
"resources/libraries/python/QemuUtils.py" and keyword "Stop and Clear QEMU" for
teardown in resources/libraries/robot/vm/qemu.robot. "Qemu Start" setup one
management interface by default. You can add Vhost-user interfaces by
"Qemu Add Vhost User If" keyword.
Example usage in robot framework test:

*** Settings ***
| Resource | resources/libraries/robot/vm/qemu.robot

*** Test Cases ***
| VM test
| | [Tags] | VPP_VM_ENV
| | Qemu Set Node | ${nodes['DUT1']}
| | Qemu Add Vhost User If | /tmp/vhost_sock
| | ${vm}= | Set Variable | ${None}
| | ${vm}= | Qemu Start
| | [Teardown] | Stop and Clear QEMU | ${dut1} | ${vm}

Note that VPP must be started and configured before starting the VM when using
Vhost-user interfaces.