blob: 339d22af4cb736d27f3929a0ef203c4f02c93cff [file] [log] [blame]
dwalleck5d734432012-10-04 01:11:47 -05001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
ZhiQiang Fan39f97222013-09-20 04:49:44 +08003# Copyright 2012 OpenStack Foundation
dwalleck5d734432012-10-04 01:11:47 -05004# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
Matthew Treinisha83a16e2012-12-07 13:44:02 -050018import itertools
Daryl Walleck1465d612011-11-02 02:22:15 -050019import random
Daryl Walleck587385b2012-03-03 13:00:26 -060020import re
Rohit Karajgie1b050d2011-12-02 16:13:18 -080021import urllib
Attila Fazekasa709b762013-10-08 11:52:44 +020022import uuid
Jaroslav Henner47737d82012-12-03 15:59:20 +010023
Daryl Walleck587385b2012-03-03 13:00:26 -060024from tempest import exceptions
Daryl Walleck1465d612011-11-02 02:22:15 -050025
26
Attila Fazekasa709b762013-10-08 11:52:44 +020027def rand_uuid():
28 return str(uuid.uuid4())
29
30
31def rand_uuid_hex():
32 return uuid.uuid4().hex
33
34
Rohit Karajgicb5d9542011-12-02 14:17:06 -080035def rand_name(name='test'):
Masayuki Igawa4a2431d2013-09-17 12:27:02 +090036 return name + "-tempest-" + str(random.randint(1, 0x7fffffff))
Rohit Karajgie1b050d2011-12-02 16:13:18 -080037
38
David Kranz88d4f7c2013-03-27 11:16:37 -040039def rand_int_id(start=0, end=0x7fffffff):
Chris Yeoh8abacf32013-01-21 17:08:32 +103040 return random.randint(start, end)
41
42
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +030043def rand_mac_address():
44 """Generate an Ethernet MAC address."""
45 # NOTE(vish): We would prefer to use 0xfe here to ensure that linux
46 # bridge mac addresses don't change, but it appears to
47 # conflict with libvirt, so we use the next highest octet
48 # that has the unicast and locally administered bits set
49 # properly: 0xfa.
50 # Discussion: https://bugs.launchpad.net/nova/+bug/921838
51 mac = [0xfa, 0x16, 0x3e,
52 random.randint(0x00, 0xff),
53 random.randint(0x00, 0xff),
54 random.randint(0x00, 0xff)]
55 return ':'.join(["%02x" % x for x in mac])
56
57
Daryl Walleck587385b2012-03-03 13:00:26 -060058def build_url(host, port, api_version=None, path=None,
59 params=None, use_ssl=False):
Sean Daguef237ccb2013-01-04 15:19:14 -050060 """Build the request URL from given host, port, path and parameters."""
Rohit Karajgie1b050d2011-12-02 16:13:18 -080061
Daryl Walleck587385b2012-03-03 13:00:26 -060062 pattern = 'v\d\.\d'
63 if re.match(pattern, path):
64 message = 'Version should not be included in path.'
65 raise exceptions.InvalidConfiguration(message=message)
66
donald-ngo7fb1efa2011-12-13 17:17:36 -080067 if use_ssl:
Rohit Karajgie1b050d2011-12-02 16:13:18 -080068 url = "https://" + host
69 else:
70 url = "http://" + host
71
72 if port is not None:
73 url += ":" + port
74 url += "/"
75
Daryl Walleck587385b2012-03-03 13:00:26 -060076 if api_version is not None:
77 url += api_version + "/"
Rohit Karajgie1b050d2011-12-02 16:13:18 -080078
79 if path is not None:
80 url += path
81
82 if params is not None:
83 url += "?"
84 url += urllib.urlencode(params)
85
86 return url
Rohit Karajgiaeddf632012-05-04 05:39:13 -070087
88
89def parse_image_id(image_ref):
Sean Daguef237ccb2013-01-04 15:19:14 -050090 """Return the image id from a given image ref."""
Chris Yeohfc9e3332013-01-21 09:28:13 +103091 return image_ref.rsplit('/')[-1]
dwalleck5d734432012-10-04 01:11:47 -050092
93
94def arbitrary_string(size=4, base_text=None):
Jaroslav Henner47737d82012-12-03 15:59:20 +010095 """
96 Return size characters from base_text, repeating the base_text infinitely
97 if needed.
98 """
99 if not base_text:
dwalleck5d734432012-10-04 01:11:47 -0500100 base_text = 'test'
Jaroslav Henner47737d82012-12-03 15:59:20 +0100101 return ''.join(itertools.islice(itertools.cycle(base_text), size))