diff --git a/README.md b/README.md index ba5ff16e7ac2b3384284268344e36456dbe50c6b..2fa1641647e00039fe544f8776c256712a430aa2 100644 --- a/README.md +++ b/README.md @@ -247,23 +247,7 @@ started in the whole cluster. # Testing -There's a [Vagrant](http://www.vagrantup.com/) environment in the -`vagrant-test` subdirectory that will set up a test three-node cluster -(with Debian Jessie as the base system) using pre-packaged binaries. -To run it: +The [streampunk/ansible](https://git.autistici.org/streampunk/ansible) +project offers a Vagrant test environment that can be used to easily +test changes to the software. - $ cd vagrant-test - $ vagrant up - -It will take a while to download the base image the first time, then -it will turn up three nodes called **node1**, **node2** and **node3**. -Use `vagrant ssh` to inspect them. - -If you want to test a locally-built package, copy the `autoradio` and -`etcd` Debian packages in the `vagrant-test` directory and, in that -same directory, run - - $ dpkg-scanpackages -m . >Packages - -the provisioning process will automatically use the local packages if -they are available. diff --git a/vagrant-test/.gitignore b/vagrant-test/.gitignore deleted file mode 100644 index d5f501f828173fba8beaf79bccd73722862407d9..0000000000000000000000000000000000000000 --- a/vagrant-test/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.vagrant -*.deb -song*.ogg diff --git a/vagrant-test/Vagrantfile b/vagrant-test/Vagrantfile deleted file mode 100644 index 897bd2180d8f4914e4f7f323272e43d1e4697701..0000000000000000000000000000000000000000 --- a/vagrant-test/Vagrantfile +++ /dev/null @@ -1,74 +0,0 @@ -# Vagrantfile for a test 3-node autoradio cluster. -# -# By default it will pull autoradio packages from the public -# repository. If you want to use locally-built packages, copy the -# 'etcd' and 'autoradio-server' packages to this directory and run -# 'dpkg-scanpackages -m . >Packages'. -# -# If you have an APT proxy available, you can set the APT_PROXY -# environment variable to its host:port address, and the VMs will use -# it to retrieve Debian packages. This will make the setup step -# faster. - -API_VERSION = "2" - -# Note: we shouldn't need to create a host entry for 'etcd' but it is -# faster to set up the cluster this way. -$setup_host_file = <<SCRIPT -cat >/etc/hosts <<EOF -127.0.0.1 localhost -192.168.50.2 node1.autora.dio etcd.autora.dio node1 -192.168.50.3 node2.autora.dio node2 -192.168.50.4 node3.autora.dio node3 -EOF -SCRIPT - -# Setup apt proxy. -$setup_apt_proxy = <<SCRIPT -cat >/etc/apt/apt.conf.d/000apt-proxy <<EOF -Acquire::http::Proxy "http://#{ENV['APT_PROXY']}/"; -Acquire::http::Pipeline-Depth "23"; -EOF -SCRIPT - -Vagrant.configure(API_VERSION) do |config| - config.vm.box = "jessie" - config.vm.box_url = "http://www.incal.net/ale/debian-jessie-64.box" - - config.vm.provision "shell", inline: $setup_host_file - - if !ENV['APT_PROXY'].nil? - config.vm.provision "shell", inline: $setup_apt_proxy - end - - config.vm.provision "shell" do |s| - s.path = "bootstrap.sh" - s.args = "autora.dio" - end - - config.vm.define "node1" do |m| - m.vm.hostname = "node1" - m.vm.network "private_network", ip: "192.168.50.2" - end - - config.vm.define "node2" do |m| - m.vm.hostname = "node2" - m.vm.network "private_network", ip: "192.168.50.3" - end - - config.vm.define "node3" do |m| - m.vm.hostname = "node3" - m.vm.network "private_network", ip: "192.168.50.4" - - # Create a test mountpoint. - m.vm.provision "shell", - inline: "sleep 3 && radioctl create-mount /stream.ogg" - - # Start streaming, add a transcoded stream. - m.vm.provision "shell", path: "start-source" - m.vm.provision "shell", - inline: "sleep 1 && radioctl create-transcoding-mount --bitrate=64 --codec=mp3 --source=/stream.ogg /stream.mp3" - end - -end - diff --git a/vagrant-test/bootstrap.sh b/vagrant-test/bootstrap.sh deleted file mode 100644 index ee42ef8efc3e68fe0afcb66b9a9c5be23f3e44ec..0000000000000000000000000000000000000000 --- a/vagrant-test/bootstrap.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -set -e - -# If there is a /vagrant/Packages file, pull packages from there -# (assuming they have been built locally). Otherwise, use the default -# public repository. -default_repo="deb http://www.incal.net/ale/debian autoradio/" -local_repo="deb file:///vagrant ./" -if [ -e /vagrant/Packages ]; then - echo "Using local package repository from /vagrant" >&2 - repo="${local_repo}" -else - echo "Using default package repository" >&2 - repo="${default_repo}" -fi - -# Install our Debian apt repository. -echo "${repo}" > /etc/apt/sources.list.d/autoradio.list - -# Install the configuration. -DOMAIN="${DOMAIN:-$1}" -if [ -z "${DOMAIN}" ]; then - echo "Must set \$DOMAIN" >&2 - exit 1 -fi -cat >/etc/default/autoradio <<EOF -DOMAIN="--domain=${DOMAIN}" -EOF - -cat >/etc/default/icecast2 <<EOF -CONFIGFILE="/etc/icecast2/icecast.xml" -USERID=icecast2 -GROUPID=icecast -ENABLE=true -EOF - -cat >/etc/default/etcd <<EOF -ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 -ETCD_INITIAL_ADVERTISE_PEER_URLS=http://$(hostname -s):2380 -ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 -ETCD_ADVERTISE_CLIENT_URLS=http://$(hostname -s):2379 -ETCD_INITIAL_CLUSTER_STATE=new -#ETCD_INITIAL_CLUSTER=node1=http://192.168.50.2:2380,node2=http://192.168.50.3:2380,node3=http://192.168.50.4:2380 -ETCD_INITIAL_CLUSTER=node1=http://node1:2380,node2=http://node2:2380,node3=http://node3:2380 -EOF - -# Install the required packages. -export DEBIAN_FRONTEND=noninteractive -apt-get -qq update -yes n | apt-get install -y --force-yes -q etcd autoradio-server - -echo "All done (?)" 1>&2 -exit 0 - diff --git a/vagrant-test/ices.xml.tmpl b/vagrant-test/ices.xml.tmpl deleted file mode 100644 index c03d0402ac07beb2b612b209a40b41a73e9e36b1..0000000000000000000000000000000000000000 --- a/vagrant-test/ices.xml.tmpl +++ /dev/null @@ -1,100 +0,0 @@ -<?xml version="1.0"?> -<ices> - <!-- run in background --> - <background>0</background> - <!-- where logs, etc go. --> - <logpath>/tmp</logpath> - <logfile>ices.log</logfile> - <!-- 1=error,2=warn,3=info,4=debug --> - <loglevel>4</loglevel> - <!-- set this to 1 to log to the console instead of to the file above --> - <consolelog>1</consolelog> - - <!-- optional filename to write process id to --> - <!-- <pidfile>/home/ices/ices.pid</pidfile> --> - - <stream> - <!-- metadata used for stream listing (not currently used) --> - <metadata> - <name>Jesus</name> - <genre>Example genre</genre> - <description>A short description of your stream</description> - </metadata> - - <!-- input module - - The module used here is the playlist module - it has - 'submodules' for different types of playlist. There are - two currently implemented, 'basic', which is a simple - file-based playlist, and 'script' which invokes a command - to returns a filename to start playing. --> - - <input> - <module>playlist</module> - <param name="type">basic</param> - <param name="file">ices-playlist.txt</param> - <!-- random play --> - <param name="random">0</param> - <!-- if the playlist get updated that start at the beginning --> - <param name="restart-after-reread">1</param> - <!-- if set to 1 , plays once through, then exits. --> - <param name="once">0</param> - </input> - - <!-- Stream instance - You may have one or more instances here. This allows you to - send the same input data to one or more servers (or to different - mountpoints on the same server). Each of them can have different - parameters. This is primarily useful for a) relaying to multiple - independent servers, and b) encoding/reencoding to multiple - bitrates. - If one instance fails (for example, the associated server goes - down, etc), the others will continue to function correctly. - This example defines two instances as two mountpoints on the - same server. --> - <instance> - <!-- Server details: - You define hostname and port for the server here, along with - the source password and mountpoint. --> - <hostname>192.168.50.3</hostname> - <port>80</port> - <username>@USERNAME@</username> - <password>@PASSWORD@</password> - <mount>/stream.ogg</mount> - - <!-- Reconnect parameters: - When something goes wrong (e.g. the server crashes, or the - network drops) and ices disconnects from the server, these - control how often it tries to reconnect, and how many times - it tries to reconnect. Delay is in seconds. - If you set reconnectattempts to -1, it will continue - indefinately. Suggest setting reconnectdelay to a large value - if you do this. - --> - <reconnectdelay>1</reconnectdelay> - <reconnectattempts>100000</reconnectattempts> - - <!-- maxqueuelength: - This describes how long the internal data queues may be. This - basically lets you control how much data gets buffered before - ices decides it can't send to the server fast enough, and - either shuts down or flushes the queue (dropping the data) - and continues. - For advanced users only. - --> - <maxqueuelength>80</maxqueuelength> - - <!-- Live encoding/reencoding: - Currrently, the parameters given here for encoding MUST - match the input data for channels and sample rate. That - restriction will be relaxed in the future. - --> - <encode> - <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps --> - <samplerate>44100</samplerate> - <channels>2</channels> - </encode> - </instance> - - </stream> -</ices> diff --git a/vagrant-test/run-tests b/vagrant-test/run-tests deleted file mode 100755 index 9a78ee816a9565b182ac8ee8c15338eccb172ab9..0000000000000000000000000000000000000000 --- a/vagrant-test/run-tests +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# -# Test that the running autoradio cluster on Vagrant is performing -# as expected. -# - -expected_dns="192.168.50.2 192.168.50.3 192.168.50.4" -dns=$(dig +short stream.autora.dio @192.168.50.3 | sort | tr '\n' ' ' | sed -e 's/ $//') -if [ "$dns" != "$expected_dns" ]; then - echo "DNS query for stream.autora.dio did not return expected results: ${expected_dns}" >&2 - exit 1 -fi - -echo "Vagrant autoradio cluster looks ok." >&2 - -exit 0 diff --git a/vagrant-test/start-source b/vagrant-test/start-source deleted file mode 100755 index c6474a29b56c93bb67878b93245ecb34373adedf..0000000000000000000000000000000000000000 --- a/vagrant-test/start-source +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -# -# Stream data to the test mountpoint, using 'ices2'. -# - -stream=${1:-/stream.ogg} - -# Download a couple of test songs. -for song in song1.ogg song2.ogg ; do - test -e /vagrant/${song} || wget -O /vagrant/${song} http://www.incal.net/ale/test-songs/${song} -done - -# Install Ices2. -sudo apt-get -q -y install ices2 - -# Create the Ices2 config file. -username=$(radioctl show-mount ${stream} | awk -F= '/^username/ {print $2}') -password=$(radioctl show-mount ${stream} | awk -F= '/^password/ {print $2}') -if [ -z "${username}" ]; then - echo "ERROR: stream ${stream} not found" - exit 1 -fi - -sed -e s/@USERNAME@/${username}/ -e s/@PASSWORD@/${password}/ \ - < /vagrant/ices.xml.tmpl > /tmp/ices.xml -cat > /tmp/ices-playlist.txt <<EOF -/vagrant/song1.ogg -/vagrant/song2.ogg -EOF - -cd /tmp -ices2 /tmp/ices.xml >/tmp/ices.log 2>&1 &