You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2016/10/06 22:24:05 UTC

[2/4] libcloud git commit: Updated RunAbove to OVH

Updated RunAbove to OVH


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/4f87f556
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/4f87f556
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/4f87f556

Branch: refs/heads/trunk
Commit: 4f87f556ef6f21976e25b77ca28beaea6f23a09f
Parents: d810096
Author: ZuluPro <mo...@hotmail.com>
Authored: Wed Oct 5 16:22:50 2016 -0400
Committer: Anthony Shaw <an...@apache.org>
Committed: Fri Oct 7 09:23:34 2016 +1100

----------------------------------------------------------------------
 libcloud/test/common/test_ovh.py                |   2 +-
 libcloud/test/common/test_runabove.py           |  29 ---
 .../compute/fixtures/ovh/auth_time_get.json     |   1 +
 .../test/compute/fixtures/ovh/flavor_get.json   |   1 +
 .../compute/fixtures/ovh/flavor_get_detail.json |   1 +
 .../test/compute/fixtures/ovh/image_get.json    |   1 +
 .../compute/fixtures/ovh/image_get_detail.json  |   1 +
 .../test/compute/fixtures/ovh/instance_get.json |   1 +
 .../fixtures/ovh/instance_get_detail.json       |   1 +
 .../compute/fixtures/ovh/instance_post.json     |   1 +
 .../test/compute/fixtures/ovh/region_get.json   |   1 +
 libcloud/test/compute/fixtures/ovh/ssh_get.json |   1 +
 .../compute/fixtures/ovh/ssh_get_detail.json    |   1 +
 .../test/compute/fixtures/ovh/volume_get.json   |   1 +
 .../compute/fixtures/ovh/volume_get_detail.json |   1 +
 .../fixtures/runabove/auth_time_get.json        |   1 -
 .../compute/fixtures/runabove/flavor_get.json   |   1 -
 .../fixtures/runabove/flavor_get_detail.json    |   1 -
 .../compute/fixtures/runabove/image_get.json    |   1 -
 .../fixtures/runabove/image_get_detail.json     |   1 -
 .../compute/fixtures/runabove/instance_get.json |   1 -
 .../fixtures/runabove/instance_get_detail.json  |   1 -
 .../fixtures/runabove/instance_post.json        |   1 -
 .../compute/fixtures/runabove/region_get.json   |   1 -
 .../test/compute/fixtures/runabove/ssh_get.json |   2 -
 .../fixtures/runabove/ssh_get_detail.json       |   1 -
 .../compute/fixtures/runabove/volume_get.json   |   1 -
 .../fixtures/runabove/volume_get_detail.json    |   1 -
 libcloud/test/compute/test_ovh.py               | 205 +++++++++++++++++++
 libcloud/test/compute/test_runabove.py          | 201 ------------------
 libcloud/test/secrets.py-dist                   |   2 +-
 31 files changed, 220 insertions(+), 246 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/common/test_ovh.py
----------------------------------------------------------------------
diff --git a/libcloud/test/common/test_ovh.py b/libcloud/test/common/test_ovh.py
index 946f907..c1662d6 100644
--- a/libcloud/test/common/test_ovh.py
+++ b/libcloud/test/common/test_ovh.py
@@ -16,7 +16,7 @@
 import re
 from libcloud.test import MockHttp
 
-FORMAT_URL = re.compile(r'[./-]')
+FORMAT_URL = re.compile(r'[./?=-]')
 
 
 class BaseOvhMockHttp(MockHttp):

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/common/test_runabove.py
----------------------------------------------------------------------
diff --git a/libcloud/test/common/test_runabove.py b/libcloud/test/common/test_runabove.py
deleted file mode 100644
index aead6c7..0000000
--- a/libcloud/test/common/test_runabove.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-
-import re
-from libcloud.test import MockHttp
-
-FORMAT_URL = re.compile(r'[./-]')
-
-
-class BaseRunAboveMockHttp(MockHttp):
-
-    def _get_method_name(self, type, use_param, qs, path):
-        return "_json"
-
-    def _json(self, method, url, body, headers):
-        meth_name = '_json%s_%s' % (FORMAT_URL.sub('_', url), method.lower())
-        return getattr(self, meth_name)(method, url, body, headers)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/auth_time_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/auth_time_get.json b/libcloud/test/compute/fixtures/ovh/auth_time_get.json
new file mode 100644
index 0000000..f84eeec
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/auth_time_get.json
@@ -0,0 +1 @@
+1437075564

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/flavor_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/flavor_get.json b/libcloud/test/compute/fixtures/ovh/flavor_get.json
new file mode 100644
index 0000000..d81087d
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/flavor_get.json
@@ -0,0 +1 @@
+[{"id":"foo-id","disk":80,"name":"ovh.intel.ha.l","ram":8192,"vcpus":2,"region":"SBG1","type":"ovh.ceph.eg","inboundBandwidth":511,"osType":"Linux"},{"id":"bar-id","disk":80,"name":"ovh.intel.ha.l","ram":8192,"vcpus":2,"region":"SBG1","type":"ovh.ceph.eg", "outboundBandwidth": 511,"inboundBandwidth": 511,"osType":"Linux"}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/flavor_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/flavor_get_detail.json b/libcloud/test/compute/fixtures/ovh/flavor_get_detail.json
new file mode 100644
index 0000000..9695862
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/flavor_get_detail.json
@@ -0,0 +1 @@
+{"id":"foo-id","disk":80,"name":"ra.intel.ha.l","ram":8192,"vcpus":2,"region":"SBG-1","type":"ra.s"}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/image_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/image_get.json b/libcloud/test/compute/fixtures/ovh/image_get.json
new file mode 100644
index 0000000..aa552d9
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/image_get.json
@@ -0,0 +1 @@
+[{"id":"foo-id","name":"Debian 8","region":"SBG-1","visibility":"public","deprecated":false},{"id":"bar-id","name":"CentOs","region":"SBG-1","visibility":"public","deprecated":false}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/image_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/image_get_detail.json b/libcloud/test/compute/fixtures/ovh/image_get_detail.json
new file mode 100644
index 0000000..6048ed3
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/image_get_detail.json
@@ -0,0 +1 @@
+{"id":"foo-id","name":"Debian 8","region":"SBG-1","visibility":"public","deprecated":false}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/instance_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/instance_get.json b/libcloud/test/compute/fixtures/ovh/instance_get.json
new file mode 100644
index 0000000..61f28c8
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/instance_get.json
@@ -0,0 +1 @@
+[{"id":"foo","name":"test_vm","ipAddresses":[{"networkId":"","version":4, "ip":"92.0.0.1","type":"public"}],"flavorId":"551dc104-4174-495a-af34-4aafe75f22ca","imageId":"1f3b49ad-3566-4838-93f8-b657a36b870f","sshKeyId":"6447567a6447746c655bad3d","status":"ACTIVE","created":"2015-05-29T11:20:48Z","region":"SBG1"}, {"id":"bar","name":"test_vm2","ipAddresses":[{"networkId":"","version":4, "ip":"92.0.0.2","type":"public"}],"flavorId":"551dc104-4174-495a-af34-4aafe75f22ca","imageId":"1f3b49ad-3566-4838-93f8-b657a36b870f","sshKeyId":"mykey","status":"ACTIVE","created":"2015-05-29T11:40:48Z","region":"SBG-1"}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/instance_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/instance_get_detail.json b/libcloud/test/compute/fixtures/ovh/instance_get_detail.json
new file mode 100644
index 0000000..b5c5df8
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/instance_get_detail.json
@@ -0,0 +1 @@
+{"status":"ACTIVE","region":"SBG1","name":"test_vm","image":{"visibility":"public","status":"active","region":"SBG1","name":"Ubuntu12.04","minDisk":0,"size":2.19921875,"creationDate":"2016-06-01T07:39:56Z","minRam":0,"user":"ubuntu","id":"3031ed24-8337-4b09-94b5-e51c54bec6c8","type":"linux"},"created":"2016-10-05T19:17:14Z","sshKey":{"fingerPrint":"7d:25:ec:f9:53:91:95:13:45:f9:73:a1:33:f0:00:00","regions":["SBG1"],"name":"testkey","id":"6447567a6447746c65513d3d","publicKey":"ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAACAQC80oMgRmfbUzNWk/H2vlUl2ISHjLwIUFz+b9jB2hCXoWLluyQN4dZqebusWwUUpAzzBpUcrPLYKyPcI0H9eAJaieK1QQX7gfaWLZnvHgm64i3lkDM5HbXqxd5ZL7FqEb8UbYqiR0AK05/JCvz0ux0Qb1oXMKbs+cwYuWhTgr10tumbkSyv8MZ2hamtJt3W176F3NJuNBXTKvzWmFF6AFpdUQWMgbo86SKRlnR8Q+3YiTaaPxEXSpD120QYaDFWpdvVL+IMS5ywRrFqrDoHFbsUEPEjsPHSd/B7hbjacE8dkz5BxHAGse2vNrPzcTnvw2ovj4+xQymqH7nCxv4pD++YYzeLyhyU93Zq5e9Wp72zSSfqE4X8qJsGw+zj7RZThN/imRPrg+z96ZCIpxcvOt1gsQNXsHzF3dfThssO9JR/SjyTaGcy0yn7oyhI324YtwsaNmBXo3FdZTTaJ8MRHkwQolBvhCY74
 uHX6cZW38UHh1+O92ExLq4JWu1dx4r9o9yrkA78kl8IoXfstxr4dpAZQIh27Z+wqbw8cpwjvkDvFr1kcrK7aifhezpihrboizhgoibnzbnefnoapfnzpiafzipanfipzanfpznaipfzapfneirnsboiseibreiosbrioebgipapigbezpiabgipezbgpiabeiprbgzbg6jfGQ=="},"monthlyBilling":null,"id":"cc350b4a-b04b-41d2-959d-1f8f388877a2","ipAddresses":[{"networkId":"","version":4,"ip":"92.0.0.1","type":"public"}],"flavor":{"outboundBandwidth":102,"disk":10,"region":"SBG1","name":"vps-ssd-1","inboundBandwidth":102,"id":"98c1e679-5f2c-4069-b4da-4a4f7179b758","vcpus":1,"type":"ovh.vps-ssd","osType":"linux","ram":2000}}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/instance_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/instance_post.json b/libcloud/test/compute/fixtures/ovh/instance_post.json
new file mode 100644
index 0000000..15a4075
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/instance_post.json
@@ -0,0 +1 @@
+{"instanceId":"df4e55cb-90e6-4f20-a604-7084f311f498","name":"testvm","ipv4":"","created":"2015-07-16T22:35:55Z","status":"BUILD","flavor":{"id":"551dc104-4174-495a-af34-4aafe75f22ca","disk":30,"name":"ra.intel.sb.l","ram":4096,"vcpus":1,"region":"SBG-1","type":"ra.sb"},"image":{"id":"1f3b49ad-3566-4838-93f8-b657a36b870f","name":"Debian 8","region":"SBG-1","visibility":"","deprecated":false},"sshKey":{"publicKey":"ssh-dss AAAAB3NzaC1kc3MAAACBALDA8LBVhtEDgns2AFtF4hO7BckyFWUyuwCUy1Frh8UZSkrhRtfNcrbir/qcoql5psB8k1+qdqfq6RB/wYjXAqtoVNF+ydCgh5D0aWKSveYH9F/zuwyH+CGcu+fBLo/q6JAqnXziFluK9jcnu1vam3FvTD9nAsx5UYSvdTo+axlbAAAAFQCFBEBKWuCabLfUQpAoiMQSNpCsFQAAAIAVHwW6+LyDPyS/o6aV6icX0Gw8K9AG4zjj+OZWd0HxJP/Rn7ND1YrY63WC2vUAbmR0hrmoa3dS1Fw6553n+Ks41z9xzLydW8jLiopI655LrDtnMEzDpIYtr8idKq3j3IvmBfynvzhmb0r101agiMdEKsUJjGQbRAbL42pej5ee5gAAAIAbdNorJ2iFrcz8OyYi25Vjap+gqFGUYMwaHlta26WWf+ZHQdX/Kqsc4n4twkb94jjoj7doiBjN7aRAr9f3JEDUboTatpdOzanU9gSrryCBykz5RK016wwOU8fxdmaar/U47qEKa4TYwmYyA5UH+KmbYmJExC5ovXlI25oA
 bc1eQg== amonthe@amonthe","name":"mykey","fingerPrint":"75:19:bf:48:dc:31:5b:91:b2:e5:ba:3b:fa:dc:ef:a7","region":"BHS-1"},"region":"SBG-1"}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/region_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/region_get.json b/libcloud/test/compute/fixtures/ovh/region_get.json
new file mode 100644
index 0000000..7ed3f0b
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/region_get.json
@@ -0,0 +1 @@
+["SBG1","BHS1","GRA1"]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/ssh_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/ssh_get.json b/libcloud/test/compute/fixtures/ovh/ssh_get.json
new file mode 100644
index 0000000..3013560
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/ssh_get.json
@@ -0,0 +1 @@
+[{"publicKey":"ssh-dss AAAAB3NzaC1kc3MAAACBALDA8LBVhtEDgns2AFtF4hO7BckyFWUyuwCUy1Frh8UZSkrhRtfNcrbir/qcoql5psB8k1+qdqfq6RB/wYjXAqtoVNF+ABCDE5D0aWKSveYH9F/zuwyABCDEu+fBLo/q6JAqnXziFluK9jcnu1vam3FvTABCDEx5UYSvdTo+axlbAAAAFQCFBEABCDEabLfUQpAoiMQSNpCsFQAAAIAVHwW6ABCDEyS/o6aV6icX0Gw8K9AG4zjj+OZWd0HxJP/RnABCDErY63WC2vUAbmR0hrmoa3dS1Fw6553n+Ks41z9xzLydWABCDEpI655LrDtnMEzDpIYtr8idKq3j3IvmBfynvzhmb0r101agiMdEKsUJjGQbRAbL42ABCDEe5gAAAIAbdNorJ2iFrcz8OyYi25Vjap+gqFGUYMwaHlta26WWf+ZHQABCDEsc4n4twkb94jjoj7doiBjN7aRABCDEJEDUboTatpdOzanU9gSrryCBykz5RK016wwOU8fxdmaar/U47qEKa4TYwmYyA5UH+KmbYmJExC5ovXlI25oAbc1eQg== user@host","name":"mykey","id":"ham-id","regions":["SGB1"]}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/ssh_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/ssh_get_detail.json b/libcloud/test/compute/fixtures/ovh/ssh_get_detail.json
new file mode 100644
index 0000000..b7fa97e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/ssh_get_detail.json
@@ -0,0 +1 @@
+{"publicKey":"ssh-dss AAAAB3NzaC1kc3MAAACBALDA8LBVhtEDgns2AFtF4hO7BckyFWUyuwCUy1Frh8UZSkrhRtfNcrbir/qcoql5psB8k1+qdqfq6RB/wYjXAqtoVNF+ABCDE5D0aWKSveYH9F/zuwyABCDEu+fBLo/q6JAqnXziFluK9jcnu1vam3FvTABCDEx5UYSvdTo+axlbAAAAFQCFBEABCDEabLfUQpAoiMQSNpCsFQAAAIAVHwW6ABCDEyS/o6aV6icX0Gw8K9AG4zjj+OZWd0HxJP/RnABCDErY63WC2vUAbmR0hrmoa3dS1Fw6553n+Ks41z9xzLydWABCDEpI655LrDtnMEzDpIYtr8idKq3j3IvmBfynvzhmb0r101agiMdEKsUJjGQbRAbL42ABCDEe5gAAAIAbdNorJ2iFrcz8OyYi25Vjap+gqFGUYMwaHlta26WWf+ZHQABCDEsc4n4twkb94jjoj7doiBjN7aRABCDEJEDUboTatpdOzanU9gSrryCBykz5RK016wwOU8fxdmaar/U47qEKa4TYwmYyA5UH+KmbYmJExC5ovXlI25oAbc1eQg== user@host","name":"mykey","id":"ham-id","regions":["SGB1"]}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/volume_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/volume_get.json b/libcloud/test/compute/fixtures/ovh/volume_get.json
new file mode 100644
index 0000000..aa0b360
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/volume_get.json
@@ -0,0 +1 @@
+[{"id": "foo", "attachedTo": [], "created": "2015-08-09T15:13:59.459187Z", "name": "testvol", "description": "", "size": 10, "status": "creating", "region": "SBG-1", "type": "classic" }]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/ovh/volume_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ovh/volume_get_detail.json b/libcloud/test/compute/fixtures/ovh/volume_get_detail.json
new file mode 100644
index 0000000..861cb4e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ovh/volume_get_detail.json
@@ -0,0 +1 @@
+{"id": "foo", "attachedTo": [], "created": "2015-08-09T15:13:59.459187Z", "name": "testvol", "description": "", "size": 10, "status": "creating", "region": "SBG-1", "type": "classic" }

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/auth_time_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/auth_time_get.json b/libcloud/test/compute/fixtures/runabove/auth_time_get.json
deleted file mode 100644
index f84eeec..0000000
--- a/libcloud/test/compute/fixtures/runabove/auth_time_get.json
+++ /dev/null
@@ -1 +0,0 @@
-1437075564

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/flavor_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/flavor_get.json b/libcloud/test/compute/fixtures/runabove/flavor_get.json
deleted file mode 100644
index 19ed785..0000000
--- a/libcloud/test/compute/fixtures/runabove/flavor_get.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"id":"foo-id","disk":80,"name":"ra.intel.ha.l","ram":8192,"vcpus":2,"region":"SBG-1","type":"ra.s"},{"id":"bar-id","disk":80,"name":"ra.intel.ha.l","ram":8192,"vcpus":2,"region":"SBG-1","type":"ra.s"}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/flavor_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/flavor_get_detail.json b/libcloud/test/compute/fixtures/runabove/flavor_get_detail.json
deleted file mode 100644
index 9695862..0000000
--- a/libcloud/test/compute/fixtures/runabove/flavor_get_detail.json
+++ /dev/null
@@ -1 +0,0 @@
-{"id":"foo-id","disk":80,"name":"ra.intel.ha.l","ram":8192,"vcpus":2,"region":"SBG-1","type":"ra.s"}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/image_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/image_get.json b/libcloud/test/compute/fixtures/runabove/image_get.json
deleted file mode 100644
index aa552d9..0000000
--- a/libcloud/test/compute/fixtures/runabove/image_get.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"id":"foo-id","name":"Debian 8","region":"SBG-1","visibility":"public","deprecated":false},{"id":"bar-id","name":"CentOs","region":"SBG-1","visibility":"public","deprecated":false}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/image_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/image_get_detail.json b/libcloud/test/compute/fixtures/runabove/image_get_detail.json
deleted file mode 100644
index 6048ed3..0000000
--- a/libcloud/test/compute/fixtures/runabove/image_get_detail.json
+++ /dev/null
@@ -1 +0,0 @@
-{"id":"foo-id","name":"Debian 8","region":"SBG-1","visibility":"public","deprecated":false}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/instance_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/instance_get.json b/libcloud/test/compute/fixtures/runabove/instance_get.json
deleted file mode 100644
index 16f609e..0000000
--- a/libcloud/test/compute/fixtures/runabove/instance_get.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"instanceId":"foo","name":"test_vm","ip":"92.0.0.1","flavorId":"551dc104-4174-495a-af34-4aafe75f22ca","imageId":"1f3b49ad-3566-4838-93f8-b657a36b870f","keyName":"mykey","status":"ACTIVE","created":"2015-05-29T11:20:48Z","region":"SBG-1"}, {"instanceId":"bar","name":"test_vm2","ip":"92.0.0.2","flavorId":"551dc104-4174-495a-af34-4aafe75f22ca","imageId":"1f3b49ad-3566-4838-93f8-b657a36b870f","keyName":"mykey","status":"ACTIVE","created":"2015-05-29T11:40:48Z","region":"SBG-1"}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/instance_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/instance_get_detail.json b/libcloud/test/compute/fixtures/runabove/instance_get_detail.json
deleted file mode 100644
index 9f8ab5b..0000000
--- a/libcloud/test/compute/fixtures/runabove/instance_get_detail.json
+++ /dev/null
@@ -1 +0,0 @@
-{"instanceId":"c8de03b5-16cb-4eed-aa57-cfb1800faf00","name":"testvm","ipv4":"92.0.0.1","created":"2015-05-29T11:20:48Z","status":"ACTIVE","flavor":{"id":"551dc104-4174-495a-af34-4aafe75f22ca","disk":30,"name":"ra.intel.sb.l","ram":4096,"vcpus":1,"region":"SBG-1","type":"ra.sb"},"image":{"id":"1f3b49ad-3566-4838-93f8-b657a36b870f","name":"Debian 8","region":"SBG-1","visibility":"","deprecated":false},"sshKey":{"publicKey":"ssh-dss AAAAB3NzaC1kc3MAAACBALDA8LBVhtEDgns2AFtF4hO7BckyFWUyuwCUy1Frh8UZSkrhRtfNcrbir/qcoABCDEF8k1+qdqfq6RB/wYjXAqtoVABCDEFgh5D0aWKSveYH9F/zuwyH+CGcu+fBLo/q6JAqnXziFluK9jcnu1vam3FvTD9nAsx5UYSvdTo+axlbAAAAFQCFBEBKWuCabLfUQpAoiMQSNpCsFQAAAIAVHwW6+LyDPyS/o6aV6icX0Gw8K9AG4zjj+OZWd0HxJP/ABCDEFYrY63WC2vUAbmR0hrmoa3dS1Fw6ABCDEFs41z9xzLydW8jLiopI655LrDtnABCDEFYtr8idKq3j3IvmBfynvzhmb0r101agiMABCDEFjGQbRAbL42pej5ee5gAAAIAbdNorJ2iFrczABCDEF5Vjap+gqFGUYMwaHlta26WWf+ZHQdX/Kqsc4nABCDEF4jjoj7doiBjN7aRAr9f3JEDUboTatpdOzanU9gSrryCBykz5RK016ABCDEFxdmaar/U47qEKa4TYwmYyA5UH+KmbYmJExC5
 ovXlI25oAbc1eQg== user@host","name":"mykey","fingerPrint":"75:19:bf:48:dc:31:5b:91:b2:e5:ba:3b:f0:00:ba:ar","region":"SBG-1"},"region":"SBG-1"}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/instance_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/instance_post.json b/libcloud/test/compute/fixtures/runabove/instance_post.json
deleted file mode 100644
index 15a4075..0000000
--- a/libcloud/test/compute/fixtures/runabove/instance_post.json
+++ /dev/null
@@ -1 +0,0 @@
-{"instanceId":"df4e55cb-90e6-4f20-a604-7084f311f498","name":"testvm","ipv4":"","created":"2015-07-16T22:35:55Z","status":"BUILD","flavor":{"id":"551dc104-4174-495a-af34-4aafe75f22ca","disk":30,"name":"ra.intel.sb.l","ram":4096,"vcpus":1,"region":"SBG-1","type":"ra.sb"},"image":{"id":"1f3b49ad-3566-4838-93f8-b657a36b870f","name":"Debian 8","region":"SBG-1","visibility":"","deprecated":false},"sshKey":{"publicKey":"ssh-dss AAAAB3NzaC1kc3MAAACBALDA8LBVhtEDgns2AFtF4hO7BckyFWUyuwCUy1Frh8UZSkrhRtfNcrbir/qcoql5psB8k1+qdqfq6RB/wYjXAqtoVNF+ydCgh5D0aWKSveYH9F/zuwyH+CGcu+fBLo/q6JAqnXziFluK9jcnu1vam3FvTD9nAsx5UYSvdTo+axlbAAAAFQCFBEBKWuCabLfUQpAoiMQSNpCsFQAAAIAVHwW6+LyDPyS/o6aV6icX0Gw8K9AG4zjj+OZWd0HxJP/Rn7ND1YrY63WC2vUAbmR0hrmoa3dS1Fw6553n+Ks41z9xzLydW8jLiopI655LrDtnMEzDpIYtr8idKq3j3IvmBfynvzhmb0r101agiMdEKsUJjGQbRAbL42pej5ee5gAAAIAbdNorJ2iFrcz8OyYi25Vjap+gqFGUYMwaHlta26WWf+ZHQdX/Kqsc4n4twkb94jjoj7doiBjN7aRAr9f3JEDUboTatpdOzanU9gSrryCBykz5RK016wwOU8fxdmaar/U47qEKa4TYwmYyA5UH+KmbYmJExC5ovXlI25oA
 bc1eQg== amonthe@amonthe","name":"mykey","fingerPrint":"75:19:bf:48:dc:31:5b:91:b2:e5:ba:3b:fa:dc:ef:a7","region":"BHS-1"},"region":"SBG-1"}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/region_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/region_get.json b/libcloud/test/compute/fixtures/runabove/region_get.json
deleted file mode 100644
index 9ceda7f..0000000
--- a/libcloud/test/compute/fixtures/runabove/region_get.json
+++ /dev/null
@@ -1 +0,0 @@
-["SBG-1","BHS-1"]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/ssh_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/ssh_get.json b/libcloud/test/compute/fixtures/runabove/ssh_get.json
deleted file mode 100644
index 47dccfc..0000000
--- a/libcloud/test/compute/fixtures/runabove/ssh_get.json
+++ /dev/null
@@ -1,2 +0,0 @@
-
-[{"publicKey":"ssh-dss AAAAB3NzaC1kc3MAAACBALDA8LBVhtEDgns2AFtF4hO7BckyFWUyuwCUy1Frh8UZSkrhRtfNcrbir/qcoql5psB8k1+qdqfq6RB/wYjXAqtoVNF+ABCDE5D0aWKSveYH9F/zuwyABCDEu+fBLo/q6JAqnXziFluK9jcnu1vam3FvTABCDEx5UYSvdTo+axlbAAAAFQCFBEABCDEabLfUQpAoiMQSNpCsFQAAAIAVHwW6ABCDEyS/o6aV6icX0Gw8K9AG4zjj+OZWd0HxJP/RnABCDErY63WC2vUAbmR0hrmoa3dS1Fw6553n+Ks41z9xzLydWABCDEpI655LrDtnMEzDpIYtr8idKq3j3IvmBfynvzhmb0r101agiMdEKsUJjGQbRAbL42ABCDEe5gAAAIAbdNorJ2iFrcz8OyYi25Vjap+gqFGUYMwaHlta26WWf+ZHQABCDEsc4n4twkb94jjoj7doiBjN7aRABCDEJEDUboTatpdOzanU9gSrryCBykz5RK016wwOU8fxdmaar/U47qEKa4TYwmYyA5UH+KmbYmJExC5ovXlI25oAbc1eQg== user@host","name":"mykey","fingerPrint":"75:19:bf:48:dc:31:5b:91:b2:e5:ba:3b:f0:00:ba:ar","region":"SGB-1"}]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/ssh_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/ssh_get_detail.json b/libcloud/test/compute/fixtures/runabove/ssh_get_detail.json
deleted file mode 100644
index 7373992..0000000
--- a/libcloud/test/compute/fixtures/runabove/ssh_get_detail.json
+++ /dev/null
@@ -1 +0,0 @@
-{"publicKey":"ssh-dss AAAAB3NzaC1kc3MAAACBALDA8LBVhtEDgns2AFtF4hO7BckyFWUyuwCUy1Frh8UZSkrhRtfNcrbir/qcoql5psB8k1+qdqfq6RB/wYjXAqtoVNF+ABCDE5D0aWKSveYH9F/zuwyABCDEu+fBLo/q6JAqnXziFluK9jcnu1vam3FvTABCDEx5UYSvdTo+axlbAAAAFQCFBEABCDEabLfUQpAoiMQSNpCsFQAAAIAVHwW6ABCDEyS/o6aV6icX0Gw8K9AG4zjj+OZWd0HxJP/RnABCDErY63WC2vUAbmR0hrmoa3dS1Fw6553n+Ks41z9xzLydWABCDEpI655LrDtnMEzDpIYtr8idKq3j3IvmBfynvzhmb0r101agiMdEKsUJjGQbRAbL42ABCDEe5gAAAIAbdNorJ2iFrcz8OyYi25Vjap+gqFGUYMwaHlta26WWf+ZHQABCDEsc4n4twkb94jjoj7doiBjN7aRABCDEJEDUboTatpdOzanU9gSrryCBykz5RK016wwOU8fxdmaar/U47qEKa4TYwmYyA5UH+KmbYmJExC5ovXlI25oAbc1eQg== user@host","name":"mykey","fingerPrint":"75:19:bf:48:dc:31:5b:91:b2:e5:ba:3b:f0:00:ba:ar","region":"SGB-1"}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/volume_get.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/volume_get.json b/libcloud/test/compute/fixtures/runabove/volume_get.json
deleted file mode 100644
index aa0b360..0000000
--- a/libcloud/test/compute/fixtures/runabove/volume_get.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"id": "foo", "attachedTo": [], "created": "2015-08-09T15:13:59.459187Z", "name": "testvol", "description": "", "size": 10, "status": "creating", "region": "SBG-1", "type": "classic" }]

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/fixtures/runabove/volume_get_detail.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/runabove/volume_get_detail.json b/libcloud/test/compute/fixtures/runabove/volume_get_detail.json
deleted file mode 100644
index 861cb4e..0000000
--- a/libcloud/test/compute/fixtures/runabove/volume_get_detail.json
+++ /dev/null
@@ -1 +0,0 @@
-{"id": "foo", "attachedTo": [], "created": "2015-08-09T15:13:59.459187Z", "name": "testvol", "description": "", "size": 10, "status": "creating", "region": "SBG-1", "type": "classic" }

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/test_ovh.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_ovh.py b/libcloud/test/compute/test_ovh.py
new file mode 100644
index 0000000..8f30687
--- /dev/null
+++ b/libcloud/test/compute/test_ovh.py
@@ -0,0 +1,205 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+import sys
+import unittest
+from mock import patch
+
+from libcloud.utils.py3 import httplib
+
+from libcloud.compute.drivers.ovh import OvhNodeDriver
+
+from libcloud.test.common.test_ovh import BaseOvhMockHttp
+from libcloud.test.secrets import OVH_PARAMS
+from libcloud.test.file_fixtures import ComputeFileFixtures
+
+
+class OvhMockHttp(BaseOvhMockHttp):
+    """Fixtures needed for tests related to rating model"""
+    fixtures = ComputeFileFixtures('ovh')
+
+    def _json_1_0_auth_time_get(self, method, url, body, headers):
+        body = self.fixtures.load('auth_time_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_region_get(self, method, url, body, headers):
+        body = self.fixtures.load('region_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_flavor_get(self, method, url, body, headers):
+        body = self.fixtures.load('flavor_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_flavor_region_SBG1_get(self, method, url, body, headers):
+        body = self.fixtures.load('flavor_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_flavor_foo_id_get(self, method, url, body, headers):
+        body = self.fixtures.load('flavor_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_image_get(self, method, url, body, headers):
+        body = self.fixtures.load('image_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_image_foo_id_get(self, method, url, body, headers):
+        body = self.fixtures.load('image_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_sshkey_region_SBG1_get(self, method, url, body, headers):
+        body = self.fixtures.load('ssh_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_sshkey_post(self, method, url, body, headers):
+        body = self.fixtures.load('ssh_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_ssh_mykey_get(self, method, url, body, headers):
+        body = self.fixtures.load('ssh_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_instance_get(self, method, url, body, headers):
+        body = self.fixtures.load('instance_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_instance_foo_get(self, method, url, body, headers):
+        body = self.fixtures.load('instance_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_instance_foo_delete(self, method, url, body, headers):
+        return (httplib.OK, '', {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_instance_post(self, method, url, body, headers):
+        body = self.fixtures.load('instance_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_volume_get(self, method, url, body, headers):
+        body = self.fixtures.load('volume_get.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_volume_post(self, method, url, body, headers):
+        body = self.fixtures.load('volume_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_volume_foo_get(self, method, url, body, headers):
+        body = self.fixtures.load('volume_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_volume_foo_delete(self, method, url, body, headers):
+        return (httplib.OK, '', {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_volume_foo_attach_post(self, method, url, body, headers):
+        body = self.fixtures.load('volume_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _json_1_0_cloud_project_project_id_volume_foo_detach_post(self, method, url, body, headers):
+        body = self.fixtures.load('volume_get_detail.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+
+@patch('libcloud.common.ovh.OvhConnection._timedelta', 42)
+class OvhTests(unittest.TestCase):
+    def setUp(self):
+        OvhNodeDriver.connectionCls.conn_classes = (
+            OvhMockHttp, OvhMockHttp)
+        OvhMockHttp.type = None
+        self.driver = OvhNodeDriver(*OVH_PARAMS)
+
+    def test_list_locations(self):
+        images = self.driver.list_locations()
+        self.assertTrue(len(images) > 0)
+
+    def test_list_images(self):
+        images = self.driver.list_images()
+        self.assertTrue(len(images) > 0)
+
+    def test_get_image(self):
+        image = self.driver.get_image('foo-id')
+        self.assertEqual(image.id, 'foo-id')
+
+    def test_list_sizes(self):
+        sizes = self.driver.list_sizes()
+        self.assertTrue(len(sizes) > 0)
+
+    def test_get_size(self):
+        size = self.driver.ex_get_size('foo-id')
+        self.assertEqual(size.id, 'foo-id')
+
+    def test_list_key_pairs(self):
+        keys = self.driver.list_sizes()
+        self.assertTrue(len(keys) > 0)
+
+    def test_get_key_pair(self):
+        location = self.driver.list_locations()[0]
+        key = self.driver.get_key_pair('mykey', location)
+        self.assertEqual(key.name, 'mykey')
+
+    def test_import_key_pair_from_string(self):
+        location = self.driver.list_locations()[0]
+        key = self.driver.import_key_pair_from_string('mykey', 'material',
+                                                      location)
+        self.assertEqual(key.name, 'mykey')
+
+    def test_list_nodes(self):
+        nodes = self.driver.list_nodes()
+        self.assertTrue(len(nodes) > 0)
+
+    def test_get_node(self):
+        node = self.driver.ex_get_node('foo')
+        self.assertEqual(node.name, 'test_vm')
+
+    def test_create_node(self):
+        location = self.driver.list_locations()[0]
+        image = self.driver.list_sizes(location)[0]
+        size = self.driver.list_sizes(location)[0]
+        node = self.driver.create_node(name='test_vm', image=image, size=size,
+                                       location=location)
+        self.assertEqual(node.name, 'test_vm')
+
+    def test_destroy_node(self):
+        node = self.driver.list_nodes()[0]
+        self.driver.destroy_node(node)
+
+    def test_list_volumes(self):
+        volumes = self.driver.list_volumes()
+        self.assertTrue(len(volumes) > 0)
+
+    def test_get_volume(self):
+        volume = self.driver.ex_get_volume('foo')
+        self.assertEqual(volume.name, 'testvol')
+
+    def test_create_volume(self):
+        location = self.driver.list_locations()[0]
+        volume = self.driver.create_volume(size=10, name='testvol',
+                                           location=location)
+        self.assertEqual(volume.name, 'testvol')
+
+    def test_destroy_volume(self):
+        volume = self.driver.list_volumes()[0]
+        self.driver.destroy_volume(volume)
+
+    def test_attach_volume(self):
+        node = self.driver.list_nodes()[0]
+        volume = self.driver.ex_get_volume('foo')
+        response = self.driver.attach_volume(node=node, volume=volume)
+        self.assertTrue(response)
+
+    def test_detach_volume(self):
+        node = self.driver.list_nodes()[0]
+        volume = self.driver.ex_get_volume('foo')
+        response = self.driver.detach_volume(ex_node=node, volume=volume)
+        self.assertTrue(response)
+
+if __name__ == '__main__':
+    sys.exit(unittest.main())

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/compute/test_runabove.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_runabove.py b/libcloud/test/compute/test_runabove.py
deleted file mode 100644
index a1538e0..0000000
--- a/libcloud/test/compute/test_runabove.py
+++ /dev/null
@@ -1,201 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-import sys
-import unittest
-from mock import patch
-
-from libcloud.utils.py3 import httplib
-
-from libcloud.compute.drivers.runabove import RunAboveNodeDriver
-
-from libcloud.test.common.test_runabove import BaseRunAboveMockHttp
-from libcloud.test.secrets import RUNABOVE_PARAMS
-from libcloud.test.file_fixtures import ComputeFileFixtures
-
-
-class RunAboveMockHttp(BaseRunAboveMockHttp):
-    """Fixtures needed for tests related to rating model"""
-    fixtures = ComputeFileFixtures('runabove')
-
-    def _json_1_0_auth_time_get(self, method, url, body, headers):
-        body = self.fixtures.load('auth_time_get.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_region_get(self, method, url, body, headers):
-        body = self.fixtures.load('region_get.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_flavor_foo_id_get(self, method, url, body, headers):
-        body = self.fixtures.load('flavor_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_flavor_get(self, method, url, body, headers):
-        body = self.fixtures.load('flavor_get.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_image_get(self, method, url, body, headers):
-        body = self.fixtures.load('image_get.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_image_foo_id_get(self, method, url, body, headers):
-        body = self.fixtures.load('image_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_ssh_get(self, method, url, body, headers):
-        body = self.fixtures.load('ssh_get.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_ssh_post(self, method, url, body, headers):
-        body = self.fixtures.load('ssh_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_ssh_mykey_get(self, method, url, body, headers):
-        body = self.fixtures.load('ssh_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_instance_get(self, method, url, body, headers):
-        body = self.fixtures.load('instance_get.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_instance_foo_get(self, method, url, body, headers):
-        body = self.fixtures.load('instance_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_instance_foo_delete(self, method, url, body, headers):
-        return (httplib.OK, '', {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_instance_post(self, method, url, body, headers):
-        body = self.fixtures.load('instance_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_volume_get(self, method, url, body, headers):
-        body = self.fixtures.load('volume_get.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_volume_post(self, method, url, body, headers):
-        body = self.fixtures.load('volume_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_volume_foo_get(self, method, url, body, headers):
-        body = self.fixtures.load('volume_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_volume_foo_delete(self, method, url, body, headers):
-        return (httplib.OK, '', {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_volume_foo_attach_post(self, method, url, body, headers):
-        body = self.fixtures.load('volume_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-    def _json_1_0_volume_foo_detach_post(self, method, url, body, headers):
-        body = self.fixtures.load('volume_get_detail.json')
-        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
-
-@patch('libcloud.common.runabove.RunAboveConnection._timedelta', 42)
-class RunAboveTests(unittest.TestCase):
-    def setUp(self):
-        RunAboveNodeDriver.connectionCls.conn_classes = (
-            RunAboveMockHttp, RunAboveMockHttp)
-        RunAboveMockHttp.type = None
-        self.driver = RunAboveNodeDriver(*RUNABOVE_PARAMS)
-
-    def test_list_locations(self):
-        images = self.driver.list_locations()
-        self.assertTrue(len(images) > 0)
-
-    def test_list_images(self):
-        images = self.driver.list_images()
-        self.assertTrue(len(images) > 0)
-
-    def test_get_image(self):
-        image = self.driver.get_image('foo-id')
-        self.assertEqual(image.id, 'foo-id')
-
-    def test_list_sizes(self):
-        sizes = self.driver.list_sizes()
-        self.assertTrue(len(sizes) > 0)
-
-    def test_get_size(self):
-        size = self.driver.ex_get_size('foo-id')
-        self.assertEqual(size.id, 'foo-id')
-
-    def test_list_key_pairs(self):
-        keys = self.driver.list_sizes()
-        self.assertTrue(len(keys) > 0)
-
-    def test_get_key_pair(self):
-        location = self.driver.list_locations()[0]
-        key = self.driver.get_key_pair('mykey', location)
-        self.assertEqual(key.name, 'mykey')
-
-    def test_import_key_pair_from_string(self):
-        location = self.driver.list_locations()[0]
-        key = self.driver.import_key_pair_from_string('mykey', 'material',
-                                                      location)
-        self.assertEqual(key.name, 'mykey')
-
-    def test_list_nodes(self):
-        nodes = self.driver.list_nodes()
-        self.assertTrue(len(nodes) > 0)
-
-    def test_get_node(self):
-        node = self.driver.ex_get_node('foo')
-        self.assertEqual(node.name, 'testvm')
-
-    def test_create_node(self):
-        location = self.driver.list_locations()[0]
-        image = self.driver.list_sizes(location)[0]
-        size = self.driver.list_sizes(location)[0]
-        node = self.driver.create_node(name='testvm', image=image, size=size,
-                                       location=location)
-        self.assertEqual(node.name, 'testvm')
-
-    def test_destroy_node(self):
-        node = self.driver.list_nodes()[0]
-        self.driver.destroy_node(node)
-
-    def test_list_volumes(self):
-        volumes = self.driver.list_volumes()
-        self.assertTrue(len(volumes) > 0)
-
-    def test_get_volume(self):
-        volume = self.driver.ex_get_volume('foo')
-        self.assertEqual(volume.name, 'testvol')
-
-    def test_create_volume(self):
-        location = self.driver.list_locations()[0]
-        volume = self.driver.create_volume(size=10, name='testvol',
-                                           location=location)
-        self.assertEqual(volume.name, 'testvol')
-
-    def test_destroy_volume(self):
-        volume = self.driver.list_volumes()[0]
-        self.driver.destroy_volume(volume)
-
-    def test_attach_volume(self):
-        node = self.driver.list_nodes()[0]
-        volume = self.driver.ex_get_volume('foo')
-        response = self.driver.attach_volume(node=node, volume=volume)
-        self.assertTrue(response)
-
-    def test_detach_volume(self):
-        node = self.driver.list_nodes()[0]
-        volume = self.driver.ex_get_volume('foo')
-        response = self.driver.detach_volume(ex_node=node, volume=volume)
-        self.assertTrue(response)
-
-if __name__ == '__main__':
-    sys.exit(unittest.main())

http://git-wip-us.apache.org/repos/asf/libcloud/blob/4f87f556/libcloud/test/secrets.py-dist
----------------------------------------------------------------------
diff --git a/libcloud/test/secrets.py-dist b/libcloud/test/secrets.py-dist
index f887947..5b17a86 100644
--- a/libcloud/test/secrets.py-dist
+++ b/libcloud/test/secrets.py-dist
@@ -32,7 +32,7 @@ OPENSTACK_PARAMS = ('user_name', 'api_key', False, 'host', 8774)
 OPENNEBULA_PARAMS = ('user', 'key')
 DIMENSIONDATA_PARAMS = ('user', 'password')
 OPSOURCE_PARAMS = ('user', 'password')
-RUNABOVE_PARAMS = ('application_key', 'application_secret', 'consumer_key')
+OVH_PARAMS = ('application_key', 'application_secret', 'project_id', 'consumer_key')
 RACKSPACE_PARAMS = ('user', 'key')
 RACKSPACE_NOVA_PARAMS = ('user_name', 'api_key', False, 'host', 8774)
 SLICEHOST_PARAMS = ('key',)