Add zones_export_client's methods and tests to Designate tempest plugin
Partially-Implements: blueprint designate-tempest-plugin
Change-Id: Iff03a53842ac4e44ed720163695a35a74b970768
diff --git a/designate_tempest_plugin/common/models.py b/designate_tempest_plugin/common/models.py
new file mode 100644
index 0000000..e69bd09
--- /dev/null
+++ b/designate_tempest_plugin/common/models.py
@@ -0,0 +1,81 @@
+"""
+Copyright 2015 Rackspace
+
+Licensed 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.
+"""
+
+
+class ZoneFile(object):
+
+ def __init__(self, origin, ttl, records):
+ self.origin = origin
+ self.ttl = ttl
+ self.records = records
+
+ def __str__(self):
+ return str(self.__dict__)
+
+ def __repr__(self):
+ return str(self)
+
+ def __eq__(self, other):
+ return self.__dict__ == other.__dict__
+
+ @classmethod
+ def from_text(cls, text):
+ """Return a ZoneFile from a string containing the zone file contents"""
+ # filter out empty lines and strip all leading/trailing whitespace.
+ # this assumes no multiline records
+ lines = [x.strip() for x in text.split('\n') if x.strip()]
+
+ assert lines[0].startswith('$ORIGIN')
+ assert lines[1].startswith('$TTL')
+
+ return ZoneFile(
+ origin=lines[0].split(' ')[1],
+ ttl=int(lines[1].split(' ')[1]),
+ records=[ZoneFileRecord.from_text(x) for x in lines[2:]],
+ )
+
+
+class ZoneFileRecord(object):
+
+ def __init__(self, name, type, data):
+ self.name = str(name)
+ self.type = str(type)
+ self.data = str(data)
+
+ def __str__(self):
+ return str(self.__dict__)
+
+ def __repr__(self):
+ return str(self)
+
+ def __eq__(self, other):
+ return self.__dict__ == other.__dict__
+
+ def __hash__(self):
+ return hash(tuple(sorted(self.__dict__.items())))
+
+ @classmethod
+ def from_text(cls, text):
+ """Create a ZoneFileRecord from a line of text of a zone file, like:
+
+ mydomain.com. IN NS ns1.example.com.
+ """
+ # assumes records don't have a TTL between the name and the class.
+ # assumes no parentheses in the record, all on a single line.
+ parts = [x for x in text.split(' ', 4) if x.strip()]
+ name, rclass, rtype, data = parts
+ assert rclass == 'IN'
+ return cls(name=name, type=rtype, data=data)