Removed warden; moved to separate repo.
Change-Id: I76ae777891ad3256f1bb30f11c17c0aebfc1ed5d
Showing
13 changed files
with
0 additions
and
756 deletions
utils/warden/bin/cell-def
deleted
100755 → 0
1 | -#!/bin/bash | ||
2 | -# Creates a cell definition from the given name and LXC info | ||
3 | - | ||
4 | -name="$1" | ||
5 | -apps="${2:-drivers,openflow,proxyarp,mobility,pathpainter}" | ||
6 | - | ||
7 | -echo "export ONOS_CELL=borrow" | ||
8 | -echo "export ONOS_NIC=\"10.128.11.*\"" | ||
9 | - | ||
10 | -sudo lxc-ls -F "name,ipv4" --fancy | grep $name | \ | ||
11 | - sed "s/^$name-/OC/" | tr "[:lower:]" "[:upper:]" | \ | ||
12 | - sed -r 's/[ ]+/\=/;s/^/export /' | ||
13 | - | ||
14 | -echo "export OCT=\"10.128.11.1\"" | ||
15 | -echo "export ONOS_USER=sdn" | ||
16 | -echo "export ONOS_USE_SSH=true" | ||
17 | -echo "export ONOS_APPS=${apps}" | ||
18 | -echo "export ONOS_WEB_USER=onos" | ||
19 | -echo "export ONOS_WEB_PASS=rocks" |
utils/warden/bin/clone-node
deleted
100755 → 0
1 | -#!/bin/bash | ||
2 | -# Creates a new node from the base image. | ||
3 | - | ||
4 | -base="$1" | ||
5 | -ip="$2" | ||
6 | -name="$3" | ||
7 | -shift 3 | ||
8 | -key="$@" | ||
9 | - | ||
10 | -sudo lxc-clone -o $base -n $name | ||
11 | - | ||
12 | -sudo chmod 777 /var/lib/lxc | ||
13 | -sudo chmod 777 /var/lib/lxc/$name | ||
14 | -sudo chmod 666 /var/lib/lxc/$name/config | ||
15 | - | ||
16 | -sudo cat >>/var/lib/lxc/$name/config <<EOF | ||
17 | -lxc.network.ipv4 = ${ip}/16 | ||
18 | -lxc.network.ipv4.gateway = 10.128.0.1 | ||
19 | -EOF | ||
20 | - | ||
21 | -sudo chmod 644 /var/lib/lxc/$name/config | ||
22 | -sudo chmod 750 /var/lib/lxc/$name | ||
23 | -sudo chmod 700 /var/lib/lxc | ||
24 | - | ||
25 | -sudo lxc-start -d -n $name | ||
26 | -sudo lxc-attach -n $name -- ping -c1 8.8.8.8 | ||
27 | -sudo lxc-attach -n $name -- bash -c "echo $key >> /home/sdn/.ssh/authorized_keys" | ||
28 | -sudo lxc-attach -n $name -- bash -c "sed -i \"s/127.0.1.1.*/127.0.1.1 $name/\" /etc/hosts" |
utils/warden/bin/create-cell
deleted
100755 → 0
1 | -#!/bin/bash | ||
2 | -# Creates a new cell. | ||
3 | - | ||
4 | -name="$1" | ||
5 | -ipx="$2" | ||
6 | -spec="$3" | ||
7 | -shift 3 | ||
8 | -key="$@" | ||
9 | - | ||
10 | -cd $(dirname $0) | ||
11 | - | ||
12 | -nodes=${spec%+*} | ||
13 | -mininet=${spec#*+} | ||
14 | - | ||
15 | -sudo lxc-attach -n bit-proxy -- bash -c "grep -qF \"$key\" /home/sdn/.ssh/authorized_keys || echo $key >> /home/sdn/.ssh/authorized_keys" | ||
16 | - | ||
17 | -if [ $mininet -ge 1 ]; then | ||
18 | - ./clone-node base-mininet ${ipx/x/0} $name-n "$key" | ||
19 | -fi | ||
20 | - | ||
21 | -let n=1 | ||
22 | -while [ $n -le $nodes ]; do | ||
23 | - ./clone-node base-onos ${ipx/x/$n} $name-$n "$key" | ||
24 | - let n=n+1 | ||
25 | -done |
utils/warden/bin/destroy-cell
deleted
100755 → 0
1 | -#!/bin/bash | ||
2 | -# Destroys an LXC cell with the specified name. | ||
3 | - | ||
4 | -name=$1 | ||
5 | -spec=$2 | ||
6 | - | ||
7 | -nodes=${spec%+*} | ||
8 | -mininet=${spec#*+} | ||
9 | - | ||
10 | -cd $(dirname $0) | ||
11 | - | ||
12 | -if [ $mininet -ge 1 ]; then | ||
13 | - ./destroy-node $name-n | ||
14 | -fi | ||
15 | - | ||
16 | -let n=1 | ||
17 | -while [ $n -le $nodes ]; do | ||
18 | - ./destroy-node $name-$n | ||
19 | - let n=n+1 | ||
20 | -done |
utils/warden/bin/destroy-node
deleted
100755 → 0
utils/warden/pom.xml
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<!-- | ||
3 | - ~ Copyright 2015-present Open Networking Laboratory | ||
4 | - ~ | ||
5 | - ~ Licensed under the Apache License, Version 2.0 (the "License"); | ||
6 | - ~ you may not use this file except in compliance with the License. | ||
7 | - ~ You may obtain a copy of the License at | ||
8 | - ~ | ||
9 | - ~ http://www.apache.org/licenses/LICENSE-2.0 | ||
10 | - ~ | ||
11 | - ~ Unless required by applicable law or agreed to in writing, software | ||
12 | - ~ distributed under the License is distributed on an "AS IS" BASIS, | ||
13 | - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
14 | - ~ See the License for the specific language governing permissions and | ||
15 | - ~ limitations under the License. | ||
16 | - --> | ||
17 | -<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
18 | - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
19 | - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | ||
20 | - <modelVersion>4.0.0</modelVersion> | ||
21 | - | ||
22 | - <parent> | ||
23 | - <groupId>org.onosproject</groupId> | ||
24 | - <artifactId>onlab-utils</artifactId> | ||
25 | - <version>1.6.0-SNAPSHOT</version> | ||
26 | - <relativePath>../pom.xml</relativePath> | ||
27 | - </parent> | ||
28 | - | ||
29 | - <artifactId>onlab-warden</artifactId> | ||
30 | - <packaging>jar</packaging> | ||
31 | - | ||
32 | - <description>System Test Cell Warden</description> | ||
33 | - | ||
34 | - <dependencies> | ||
35 | - <dependency> | ||
36 | - <groupId>org.eclipse.jetty</groupId> | ||
37 | - <artifactId>jetty-server</artifactId> | ||
38 | - <version>8.1.18.v20150929</version> | ||
39 | - </dependency> | ||
40 | - <dependency> | ||
41 | - <groupId>org.eclipse.jetty</groupId> | ||
42 | - <artifactId>jetty-servlet</artifactId> | ||
43 | - <version>8.1.18.v20150929</version> | ||
44 | - </dependency> | ||
45 | - <dependency> | ||
46 | - <groupId>junit</groupId> | ||
47 | - <artifactId>junit</artifactId> | ||
48 | - <version>4.12</version> | ||
49 | - <scope>test</scope> | ||
50 | - </dependency> | ||
51 | - <dependency> | ||
52 | - <groupId>org.onosproject</groupId> | ||
53 | - <artifactId>onlab-misc</artifactId> | ||
54 | - <version>${project.version}</version> | ||
55 | - <scope>test</scope> | ||
56 | - </dependency> | ||
57 | - <dependency> | ||
58 | - <groupId>org.onosproject</groupId> | ||
59 | - <artifactId>onlab-junit</artifactId> | ||
60 | - <scope>test</scope> | ||
61 | - </dependency> | ||
62 | - </dependencies> | ||
63 | - | ||
64 | - <build> | ||
65 | - <plugins> | ||
66 | - <plugin> | ||
67 | - <groupId>org.apache.maven.plugins</groupId> | ||
68 | - <artifactId>maven-shade-plugin</artifactId> | ||
69 | - <version>2.4.3</version> | ||
70 | - <configuration> | ||
71 | - <transformers> | ||
72 | - <transformer | ||
73 | - implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> | ||
74 | - <mainClass>org.onlab.warden.Main</mainClass> | ||
75 | - </transformer> | ||
76 | - </transformers> | ||
77 | - <filters> | ||
78 | - <filter> | ||
79 | - <artifact>*:*</artifact> | ||
80 | - <excludes> | ||
81 | - <exclude>META-INF/*.SF</exclude> | ||
82 | - <exclude>META-INF/*.DSA</exclude> | ||
83 | - <exclude>META-INF/*.RSA</exclude> | ||
84 | - </excludes> | ||
85 | - </filter> | ||
86 | - </filters> | ||
87 | - </configuration> | ||
88 | - <executions> | ||
89 | - <execution> | ||
90 | - <phase>package</phase> | ||
91 | - <goals> | ||
92 | - <goal>shade</goal> | ||
93 | - </goals> | ||
94 | - </execution> | ||
95 | - </executions> | ||
96 | - </plugin> | ||
97 | - | ||
98 | - <plugin> | ||
99 | - <groupId>org.apache.maven.plugins</groupId> | ||
100 | - <artifactId>maven-surefire-plugin</artifactId> | ||
101 | - </plugin> | ||
102 | - </plugins> | ||
103 | - </build> | ||
104 | - | ||
105 | -</project> |
1 | -/* | ||
2 | - * Copyright 2016 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | - | ||
17 | -package org.onlab.warden; | ||
18 | - | ||
19 | -import org.eclipse.jetty.server.Server; | ||
20 | -import org.eclipse.jetty.servlet.ServletHandler; | ||
21 | -import org.eclipse.jetty.util.log.Logger; | ||
22 | - | ||
23 | -/** | ||
24 | - * Main program for executing scenario test warden. | ||
25 | - */ | ||
26 | -public final class Main { | ||
27 | - | ||
28 | - // Public construction forbidden | ||
29 | - private Main(String[] args) { | ||
30 | - } | ||
31 | - | ||
32 | - /** | ||
33 | - * Main entry point for the cell warden. | ||
34 | - * | ||
35 | - * @param args command-line arguments | ||
36 | - */ | ||
37 | - public static void main(String[] args) { | ||
38 | - Main main = new Main(args); | ||
39 | - main.run(); | ||
40 | - } | ||
41 | - | ||
42 | - // Runs the warden processing | ||
43 | - private void run() { | ||
44 | - startWebServer(); | ||
45 | - } | ||
46 | - | ||
47 | - // Initiates a web-server. | ||
48 | - private static void startWebServer() { | ||
49 | - WardenServlet.warden = new Warden(); | ||
50 | - org.eclipse.jetty.util.log.Log.setLog(new NullLogger()); | ||
51 | - Server server = new Server(4321); | ||
52 | - ServletHandler handler = new ServletHandler(); | ||
53 | - server.setHandler(handler); | ||
54 | - handler.addServletWithMapping(WardenServlet.class, "/*"); | ||
55 | - try { | ||
56 | - server.start(); | ||
57 | - } catch (Exception e) { | ||
58 | - print("Warden already active..."); | ||
59 | - } | ||
60 | - } | ||
61 | - | ||
62 | - private static void print(String s) { | ||
63 | - System.out.println(s); | ||
64 | - } | ||
65 | - | ||
66 | - // Logger to quiet Jetty down | ||
67 | - private static class NullLogger implements Logger { | ||
68 | - @Override | ||
69 | - public String getName() { | ||
70 | - return "quiet"; | ||
71 | - } | ||
72 | - | ||
73 | - @Override | ||
74 | - public void warn(String msg, Object... args) { | ||
75 | - } | ||
76 | - | ||
77 | - @Override | ||
78 | - public void warn(Throwable thrown) { | ||
79 | - } | ||
80 | - | ||
81 | - @Override | ||
82 | - public void warn(String msg, Throwable thrown) { | ||
83 | - } | ||
84 | - | ||
85 | - @Override | ||
86 | - public void info(String msg, Object... args) { | ||
87 | - } | ||
88 | - | ||
89 | - @Override | ||
90 | - public void info(Throwable thrown) { | ||
91 | - } | ||
92 | - | ||
93 | - @Override | ||
94 | - public void info(String msg, Throwable thrown) { | ||
95 | - } | ||
96 | - | ||
97 | - @Override | ||
98 | - public boolean isDebugEnabled() { | ||
99 | - return false; | ||
100 | - } | ||
101 | - | ||
102 | - @Override | ||
103 | - public void setDebugEnabled(boolean enabled) { | ||
104 | - } | ||
105 | - | ||
106 | - @Override | ||
107 | - public void debug(String msg, Object... args) { | ||
108 | - } | ||
109 | - | ||
110 | - @Override | ||
111 | - public void debug(Throwable thrown) { | ||
112 | - } | ||
113 | - | ||
114 | - @Override | ||
115 | - public void debug(String msg, Throwable thrown) { | ||
116 | - } | ||
117 | - | ||
118 | - @Override | ||
119 | - public Logger getLogger(String name) { | ||
120 | - return this; | ||
121 | - } | ||
122 | - | ||
123 | - @Override | ||
124 | - public void ignore(Throwable ignored) { | ||
125 | - } | ||
126 | - } | ||
127 | - | ||
128 | -} |
1 | -/* | ||
2 | - * Copyright 2016 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | - | ||
17 | -package org.onlab.warden; | ||
18 | - | ||
19 | -import static com.google.common.base.Preconditions.checkState; | ||
20 | - | ||
21 | -/** | ||
22 | - * Cell reservation record. | ||
23 | - */ | ||
24 | -final class Reservation { | ||
25 | - | ||
26 | - final String cellName; | ||
27 | - final String userName; | ||
28 | - final long time; | ||
29 | - final int duration; | ||
30 | - final String cellSpec; | ||
31 | - | ||
32 | - // Creates a new reservation record | ||
33 | - Reservation(String cellName, String userName, long time, int duration, String cellSpec) { | ||
34 | - this.cellName = cellName; | ||
35 | - this.userName = userName; | ||
36 | - this.time = time; | ||
37 | - this.duration = duration; | ||
38 | - this.cellSpec = cellSpec; | ||
39 | - } | ||
40 | - | ||
41 | - /** | ||
42 | - * Decodes reservation record from the specified line. | ||
43 | - * | ||
44 | - * @param line string line | ||
45 | - */ | ||
46 | - Reservation(String line) { | ||
47 | - String[] fields = line.trim().split("\t"); | ||
48 | - checkState(fields.length == 5, "Incorrect reservation encoding"); | ||
49 | - this.cellName = fields[0]; | ||
50 | - this.userName = fields[1]; | ||
51 | - this.time = Long.parseLong(fields[2]); | ||
52 | - this.duration = Integer.parseInt(fields[3]); | ||
53 | - this.cellSpec = fields[4]; | ||
54 | - } | ||
55 | - | ||
56 | - /** | ||
57 | - * Encodes reservation record into a string line. | ||
58 | - * | ||
59 | - * @return encoded string | ||
60 | - */ | ||
61 | - String encode() { | ||
62 | - return String.format("%s\t%s\t%s\t%s\t%s\n", cellName, userName, time, duration, cellSpec); | ||
63 | - } | ||
64 | - | ||
65 | -} |
This diff is collapsed. Click to expand it.
1 | -/* | ||
2 | - * Copyright 2016 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | - | ||
17 | -package org.onlab.warden; | ||
18 | - | ||
19 | -import com.google.common.io.ByteStreams; | ||
20 | -import org.eclipse.jetty.server.Response; | ||
21 | - | ||
22 | -import javax.servlet.ServletException; | ||
23 | -import javax.servlet.http.HttpServlet; | ||
24 | -import javax.servlet.http.HttpServletRequest; | ||
25 | -import javax.servlet.http.HttpServletResponse; | ||
26 | -import java.io.IOException; | ||
27 | -import java.io.PrintWriter; | ||
28 | -import java.text.SimpleDateFormat; | ||
29 | -import java.util.ArrayList; | ||
30 | -import java.util.Date; | ||
31 | -import java.util.List; | ||
32 | - | ||
33 | -import static com.google.common.base.Strings.isNullOrEmpty; | ||
34 | - | ||
35 | -/** | ||
36 | - * Web socket servlet capable of creating web sockets for the STC monitor. | ||
37 | - */ | ||
38 | -public class WardenServlet extends HttpServlet { | ||
39 | - | ||
40 | - static Warden warden; | ||
41 | - | ||
42 | - private SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||
43 | - | ||
44 | - @Override | ||
45 | - protected void doGet(HttpServletRequest req, HttpServletResponse resp) | ||
46 | - throws ServletException, IOException { | ||
47 | - resp.setContentType("text/plain; charset=UTF-8"); | ||
48 | - try (PrintWriter out = resp.getWriter()) { | ||
49 | - if (req.getPathInfo().endsWith("data")) { | ||
50 | - String userName = req.getParameter("user"); | ||
51 | - if (userName != null) { | ||
52 | - printUserInfo(out, userName); | ||
53 | - } else { | ||
54 | - printAvailability(out); | ||
55 | - } | ||
56 | - } else { | ||
57 | - printAvailabilityText(out); | ||
58 | - } | ||
59 | - } catch (Exception e) { | ||
60 | - resp.setStatus(Response.SC_INTERNAL_SERVER_ERROR); | ||
61 | - e.printStackTrace(); | ||
62 | - } | ||
63 | - } | ||
64 | - | ||
65 | - private void printUserInfo(PrintWriter out, String userName) { | ||
66 | - Reservation reservation = warden.currentUserReservation(userName); | ||
67 | - out.println(getCellStatus(null, reservation)); | ||
68 | - } | ||
69 | - | ||
70 | - private void printAvailability(PrintWriter out) { | ||
71 | - List<String> list = new ArrayList<>(warden.getCells()); | ||
72 | - list.sort(String::compareTo); | ||
73 | - for (String cellName : list) { | ||
74 | - Reservation reservation = warden.currentCellReservation(cellName); | ||
75 | - out.println(getCellStatus(cellName, reservation)); | ||
76 | - } | ||
77 | - } | ||
78 | - | ||
79 | - private String getCellStatus(String cellName, Reservation reservation) { | ||
80 | - if (reservation != null) { | ||
81 | - long expiration = reservation.time + reservation.duration * 60_000; | ||
82 | - long remaining = (expiration - System.currentTimeMillis()) / 60_000; | ||
83 | - return String.format("%s,%s,%s,%s", reservation.cellName, | ||
84 | - reservation.cellSpec, reservation.userName, remaining); | ||
85 | - } else if (cellName != null) { | ||
86 | - return String.format("%s", cellName); | ||
87 | - } | ||
88 | - return null; | ||
89 | - } | ||
90 | - | ||
91 | - private void printAvailabilityText(PrintWriter out) { | ||
92 | - List<String> list = new ArrayList<>(warden.getCells()); | ||
93 | - list.sort(String::compareTo); | ||
94 | - for (String cellName : list) { | ||
95 | - Reservation reservation = warden.currentCellReservation(cellName); | ||
96 | - if (reservation != null) { | ||
97 | - long expiration = reservation.time + reservation.duration * 60_000; | ||
98 | - long remaining = (expiration - System.currentTimeMillis()) / 60_000; | ||
99 | - out.println(String.format("%-14s\t%-10s\t%s\t%s\t%s mins (%s remaining)", | ||
100 | - cellName + "-" + reservation.cellSpec, | ||
101 | - reservation.userName, | ||
102 | - fmt.format(new Date(reservation.time)), | ||
103 | - fmt.format(new Date(expiration)), | ||
104 | - reservation.duration, remaining)); | ||
105 | - } else { | ||
106 | - out.println(String.format("%-10s\t%-10s", cellName, "available")); | ||
107 | - } | ||
108 | - } | ||
109 | - } | ||
110 | - | ||
111 | - @Override | ||
112 | - protected void doPost(HttpServletRequest req, HttpServletResponse resp) | ||
113 | - throws ServletException, IOException { | ||
114 | - try (PrintWriter out = resp.getWriter()) { | ||
115 | - String sshKey = new String(ByteStreams.toByteArray(req.getInputStream()), "UTF-8"); | ||
116 | - String userName = req.getParameter("user"); | ||
117 | - String sd = req.getParameter("duration"); | ||
118 | - String spec = req.getParameter("spec"); | ||
119 | - int duration = isNullOrEmpty(sd) ? 0 : Integer.parseInt(sd); | ||
120 | - String cellDefinition = warden.borrowCell(userName, sshKey, duration, spec); | ||
121 | - out.println(cellDefinition); | ||
122 | - } catch (Exception e) { | ||
123 | - resp.setStatus(Response.SC_INTERNAL_SERVER_ERROR); | ||
124 | - e.printStackTrace(); | ||
125 | - } | ||
126 | - } | ||
127 | - | ||
128 | - @Override | ||
129 | - protected void doDelete(HttpServletRequest req, HttpServletResponse resp) | ||
130 | - throws ServletException, IOException { | ||
131 | - try (PrintWriter out = resp.getWriter()) { | ||
132 | - String userName = req.getParameter("user"); | ||
133 | - warden.returnCell(userName); | ||
134 | - } catch (Exception e) { | ||
135 | - resp.setStatus(Response.SC_INTERNAL_SERVER_ERROR); | ||
136 | - e.printStackTrace(); | ||
137 | - } | ||
138 | - } | ||
139 | -} |
1 | -/* | ||
2 | - * Copyright 2016 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | - | ||
17 | -/** | ||
18 | - * Cell warden to coordinate borrowing and returning test cells. | ||
19 | - */ | ||
20 | -package org.onlab.warden; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -/* | ||
2 | - * Copyright 2016 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | - | ||
17 | -package org.onlab.warden; | ||
18 | - | ||
19 | -import com.google.common.io.Files; | ||
20 | -import org.junit.After; | ||
21 | -import org.junit.Before; | ||
22 | -import org.junit.Test; | ||
23 | -import org.onlab.util.Tools; | ||
24 | - | ||
25 | -import java.io.File; | ||
26 | -import java.io.IOException; | ||
27 | -import java.util.Objects; | ||
28 | - | ||
29 | -import static org.junit.Assert.*; | ||
30 | - | ||
31 | -/** | ||
32 | - * Suite of tests for the cell warden. | ||
33 | - */ | ||
34 | -public class WardenTest { | ||
35 | - | ||
36 | - private Warden warden; | ||
37 | - private File cells; | ||
38 | - private File supportedCells; | ||
39 | - | ||
40 | - @Before | ||
41 | - public void setUp() throws IOException { | ||
42 | - // Setup warden to be tested | ||
43 | - Warden.root = Files.createTempDir(); | ||
44 | - Warden.cmdPrefix = "echo "; | ||
45 | - cells = new File(Warden.root, "cells"); | ||
46 | - supportedCells = new File(cells, "supported"); | ||
47 | - warden = new Warden(); | ||
48 | - | ||
49 | - // Setup test cell information | ||
50 | - createCell("alpha", "foo"); | ||
51 | - createCell("bravo", "foo"); | ||
52 | - createCell("charlie", "foo"); | ||
53 | - createCell("delta", "bar"); | ||
54 | - createCell("echo", "bar"); | ||
55 | - createCell("foxtrot", "bar"); | ||
56 | - | ||
57 | - new File("warden.log").deleteOnExit(); | ||
58 | - } | ||
59 | - | ||
60 | - private void createCell(String cellName, String hostName) throws IOException { | ||
61 | - File cellFile = new File(supportedCells, cellName); | ||
62 | - Files.createParentDirs(cellFile); | ||
63 | - Files.write((hostName + " " + cellName).getBytes(), cellFile); | ||
64 | - } | ||
65 | - | ||
66 | - @After | ||
67 | - public void tearDown() throws IOException { | ||
68 | - Tools.removeDirectory(Warden.root); | ||
69 | - } | ||
70 | - | ||
71 | - @Test | ||
72 | - public void basics() { | ||
73 | - assertEquals("incorrect number of cells", 6, warden.getCells().size()); | ||
74 | - validateSizes(6, 0); | ||
75 | - | ||
76 | - String cellDefinition = warden.borrowCell("dude", "the-key", 0, null); | ||
77 | - assertTrue("incorrect definition", cellDefinition.contains("cell-def")); | ||
78 | - validateSizes(5, 1); | ||
79 | - | ||
80 | - Reservation dudeCell = warden.currentUserReservation("dude"); | ||
81 | - validateCellState(dudeCell); | ||
82 | - | ||
83 | - warden.borrowCell("dolt", "a-key", 0, "4+1"); | ||
84 | - Reservation doltCell = warden.currentUserReservation("dolt"); | ||
85 | - validateCellState(doltCell); | ||
86 | - validateSizes(4, 2); | ||
87 | - | ||
88 | - assertFalse("cells should not be on the same host", | ||
89 | - Objects.equals(warden.getCellHost(dudeCell.cellName), | ||
90 | - warden.getCellHost(doltCell.cellName))); | ||
91 | - | ||
92 | - warden.returnCell("dude"); | ||
93 | - validateSizes(5, 1); | ||
94 | - | ||
95 | - warden.borrowCell("dolt", "a-key", 30, null); | ||
96 | - validateSizes(5, 1); | ||
97 | - | ||
98 | - warden.returnCell("dolt"); | ||
99 | - validateSizes(6, 0); | ||
100 | - } | ||
101 | - | ||
102 | - private void validateSizes(int available, int reserved) { | ||
103 | - assertEquals("incorrect number of available cells", available, | ||
104 | - warden.getAvailableCells().size()); | ||
105 | - assertEquals("incorrect number of reserved cells", reserved, | ||
106 | - warden.getReservedCells().size()); | ||
107 | - } | ||
108 | - | ||
109 | - private void validateCellState(Reservation reservation) { | ||
110 | - assertFalse("cell should not be available", | ||
111 | - warden.getAvailableCells().contains(reservation.cellName)); | ||
112 | - assertTrue("cell should be reserved", | ||
113 | - warden.getReservedCells().contains(reservation.cellName)); | ||
114 | - } | ||
115 | - | ||
116 | -} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
utils/warden/warden.initd
deleted
100755 → 0
1 | -#! /bin/bash | ||
2 | -# ----------------------------------------------------------------------------- | ||
3 | -# init.d script to run ON.Lab test cell warden | ||
4 | -## ----------------------------------------------------------------------------- | ||
5 | -### BEGIN INIT INFO | ||
6 | -# Provides: warden | ||
7 | -# Required-Start: $network $remote_fs $syslog | ||
8 | -# Required-Stop: $network $remote_fs $syslog | ||
9 | -# Default-Start: 2 3 4 5 | ||
10 | -# Default-Stop: 0 1 6 | ||
11 | -# Short-Description: ON.Lab Test Cell Warden | ||
12 | -# Description: Warden is a broker for sharing test cell infrastructure among ON.Lab developers. | ||
13 | -### END INIT INFO | ||
14 | - | ||
15 | -WARDEN_USER="sdn" | ||
16 | -WARDEN_HOME="/home/$WARDEN_USER/warden" | ||
17 | -WARDEN_VERSION="1.6.0-SNAPSHOT" | ||
18 | -DEBUG="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" | ||
19 | - | ||
20 | -cd $WARDEN_HOME | ||
21 | - | ||
22 | -start () { | ||
23 | - # Start warden if it's not already running | ||
24 | - if ! status >/dev/null; then | ||
25 | - echo "Starting Warden" | ||
26 | - startwarden | ||
27 | - else | ||
28 | - echo "Warden is already running" | ||
29 | - fi | ||
30 | -} | ||
31 | - | ||
32 | -startwarden () { | ||
33 | - start-stop-daemon --signal INT --start --chuid $WARDEN_USER \ | ||
34 | - --pidfile $WARDEN_HOME/warden.pid --make-pidfile \ | ||
35 | - --background --chdir $WARDEN_HOME \ | ||
36 | - --exec /usr/bin/java -- -jar onlab-warden-$WARDEN_VERSION.jar \ | ||
37 | - &>$WARDEN_HOME/std.log | ||
38 | -} | ||
39 | - | ||
40 | -stop () { | ||
41 | - if status >/dev/null; then | ||
42 | - echo "Stopping Warden" | ||
43 | - start-stop-daemon --signal INT --stop --chuid $WARDEN_USER \ | ||
44 | - --pidfile $WARDEN_HOME/warden.pid | ||
45 | - rm warden.pid | ||
46 | - else | ||
47 | - echo "Warden is not running" | ||
48 | - fi | ||
49 | -} | ||
50 | - | ||
51 | -restart () { | ||
52 | - stop | ||
53 | - start | ||
54 | -} | ||
55 | - | ||
56 | -status () { | ||
57 | - start-stop-daemon --signal INT --status --chuid $WARDEN_USER \ | ||
58 | - --pidfile $WARDEN_HOME/warden.pid | ||
59 | -} | ||
60 | - | ||
61 | -case $1 in | ||
62 | - start) | ||
63 | - start | ||
64 | - ;; | ||
65 | - stop | force-stop) | ||
66 | - stop | ||
67 | - ;; | ||
68 | - restart) | ||
69 | - shift | ||
70 | - restart "$@" | ||
71 | - ;; | ||
72 | - status) | ||
73 | - status && echo "Warden is running" || echo "Warden is stopped" | ||
74 | - exit $? | ||
75 | - ;; | ||
76 | - *) | ||
77 | - echo "Usage: $0 {start|stop|restart|status}" >&2 | ||
78 | - exit 1 | ||
79 | - ;; | ||
80 | -esac | ||
81 | - | ||
82 | -exit 0 |
-
Please register or login to post a comment