aboutsummaryrefslogtreecommitdiff
path: root/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py
diff options
context:
space:
mode:
Diffstat (limited to 'bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py')
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py96
1 files changed, 53 insertions, 43 deletions
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py b/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py
index dd20c53d..4fd44ceb 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py
@@ -15,83 +15,93 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import unittest
import amulet
import re
+import time
+import unittest
class TestConfigChanged(unittest.TestCase):
"""
- Test to verify that we update network interface bindings successfully.
-
+ Test to verify that we can bind to listen for client connections
+ on a specific interface.
"""
@classmethod
def setUpClass(cls):
- cls.d = amulet.Deployment(series='trusty')
- cls.d.log.debug("foo!")
- cls.d.add('kafka', 'kafka')
- cls.d.add('openjdk', 'openjdk')
- cls.d.add('zk', 'zookeeper')
-
- cls.d.configure('openjdk', {'java-type': 'jdk',
- 'java-major': '8'})
-
- cls.d.relate('kafka:zookeeper', 'zk:zookeeper')
- cls.d.relate('kafka:java', 'openjdk:java')
- try:
- cls.d.relate('zk:java', 'openjdk:java')
- except ValueError:
- # No need to related older versions of the zookeeper charm
- # to java.
- pass
-
- cls.d.setup(timeout=900)
+ cls.d = amulet.Deployment(series='xenial')
+ cls.d.add('kafka', charm='kafka')
+ cls.d.add('zookeeper', charm='cs:xenial/zookeeper')
+
+ cls.d.relate('kafka:zookeeper', 'zookeeper:zookeeper')
+
+ cls.d.setup(timeout=1800)
cls.d.sentry.wait_for_messages({'kafka': 'ready'}, timeout=1800)
- cls.kafka = cls.d.sentry['kafka'][0]
+ cls.unit = cls.d.sentry['kafka'][0]
def test_bind_network_interface(self):
"""
- Test to verify that we update network interface bindings successfully.
-
+ Verify that we update client port bindings successfully.
"""
- self.d.configure('kafka', {'network_interface': 'eth0'})
- self.d.sentry.wait_for_messages({'kafka': 'updating zookeeper instances'}, timeout=600)
-
- self.d.sentry.wait_for_messages({'kafka': 'ready'}, timeout=600)
- ret = self.kafka.run(
+ network_interface = None
+ # Regular expression should handle interfaces in the format
+ # eth[n], and in the format en[foo] (the "predicatble
+ # interface names" in v197+ of systemd).
+ ethernet_interface = re.compile('^e[thn]+.*')
+ interfaces, _ = self.unit.run(
+ "ifconfig -a | sed 's/[ \t].*//;/^$/d'")
+ interfaces = interfaces.split() # Splits on newlines
+ for interface in interfaces:
+ if ethernet_interface.match(interface):
+ network_interface = interface
+ break
+
+ if network_interface is None:
+ raise Exception(
+ "Could not find any interface on the unit that matched my "
+ "criteria.")
+ self.d.configure('kafka', {'network_interface': network_interface})
+
+ # NB: we used to watch for a maintenance status message, but every now
+ # and then, we'd miss it. Wait 2m to let the config-changed hook settle.
+ time.sleep(120)
+ ret = self.unit.run(
'grep host.name /etc/kafka/conf/server.properties')[0]
+
# Correct line should start with host.name (no comment hash
# mark), followed by an equals sign and something that looks
# like an IP address (we aren't too strict about it being a
# valid ip address.)
matcher = re.compile("^host\.name=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.*")
-
- self.assertTrue('host.name' in ret)
self.assertTrue(matcher.match(ret))
# Verify that smoke tests still run
- smk_uuid = self.kafka.action_do("smoke-test")
- output = self.d.action_fetch(smk_uuid, full_output=True)
- assert "completed" in output['status']
+ smk_uuid = self.unit.run_action('smoke-test')
+ result = self.d.action_fetch(smk_uuid, full_output=True)
+ # actions set status=completed on success
+ if (result['status'] != "completed"):
+ self.fail('Kafka test failed after setting nic config: %s' % result)
def test_reset_network_interface(self):
"""
- Verify that we can reset the network interface to 0.
-
+ Verify that we can reset the client port bindings to 0.0.0.0
"""
self.d.configure('kafka', {'network_interface': '0.0.0.0'})
- self.d.sentry.wait_for_messages({'kafka': 'updating zookeeper instances'}, timeout=600)
- self.d.sentry.wait_for_messages({'kafka': 'ready'}, timeout=600)
- ret = self.kafka.run(
+
+ # NB: we used to watch for a maintenance status message, but every now
+ # and then, we'd miss it. Wait 2m to let the config-changed hook settle.
+ time.sleep(120)
+ ret = self.unit.run(
'grep host.name /etc/kafka/conf/server.properties')[0]
matcher = re.compile("^host\.name=0\.0\.0\.0.*")
self.assertTrue(matcher.match(ret))
# Verify that smoke tests still run
- smk_uuid = self.kafka.action_do("smoke-test")
- output = self.d.action_fetch(smk_uuid, full_output=True)
- assert "completed" in output['status']
+ smk_uuid = self.unit.run_action('smoke-test')
+ result = self.d.action_fetch(smk_uuid, full_output=True)
+ # actions set status=completed on success
+ if (result['status'] != "completed"):
+ self.fail('Kafka test failed after resetting nic config: %s' % result)
if __name__ == '__main__':