Add method is_valid_mac

Method is_valid_mac is defined in Ironic[1] and Magnum[2], It's good
for oslo.utils to adopt it.

[1]44bde8cd2d/ironic/common/utils.py (L118)
[2]cc839e86af/magnum/common/utils.py (L103)

Change-Id: Idc3d38d8d569cc6c1e53fb75df61f6b90abed28d
This commit is contained in:
ChangBo Guo(gcb) 2016-10-17 15:57:52 +08:00
parent e98815718d
commit e4c9a25823
2 changed files with 29 additions and 0 deletions

View File

@ -19,10 +19,12 @@ Network-related utilities and helper functions.
import logging
import os
import re
import socket
import netaddr
import netifaces
import six
from six.moves.urllib import parse
from oslo_utils._i18n import _
@ -219,6 +221,22 @@ def is_valid_ip(address):
return is_valid_ipv4(address) or is_valid_ipv6(address)
def is_valid_mac(address):
"""Verify the format of a MAC address.
Check if a MAC address is valid and contains six octets. Accepts
colon-separated format only.
:param address: MAC address to be validated.
:returns: True if valid. False if not.
.. versionadded:: 3.17
"""
m = "[0-9a-f]{2}(:[0-9a-f]{2}){5}$"
return (isinstance(address, six.string_types) and
re.match(m, address.lower()))
def _is_int_in_range(value, start, end):
"""Try to convert value to int and check if it lies within
range 'start' to 'end'.

View File

@ -179,6 +179,17 @@ class NetworkUtilsTest(test_base.BaseTestCase):
self.assertFalse(netutils.is_valid_ip(''))
def test_is_valid_mac(self):
self.assertTrue(netutils.is_valid_mac("52:54:00:cf:2d:31"))
self.assertTrue(netutils.is_valid_mac(u"52:54:00:cf:2d:31"))
self.assertFalse(netutils.is_valid_mac("127.0.0.1"))
self.assertFalse(netutils.is_valid_mac("not:a:mac:address"))
self.assertFalse(netutils.is_valid_mac("52-54-00-cf-2d-31"))
self.assertFalse(netutils.is_valid_mac("aa bb cc dd ee ff"))
self.assertTrue(netutils.is_valid_mac("AA:BB:CC:DD:EE:FF"))
self.assertFalse(netutils.is_valid_mac("AA BB CC DD EE FF"))
self.assertFalse(netutils.is_valid_mac("AA-BB-CC-DD-EE-FF"))
def test_is_valid_cidr(self):
self.assertTrue(netutils.is_valid_cidr('10.0.0.0/24'))
self.assertTrue(netutils.is_valid_cidr('10.0.0.1/32'))