From f01094f310a790d7302640eb88787918b1c7d317 Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Wed, 12 Dec 2012 14:57:03 +0100
Subject: [PATCH] Slaptool now uses updateConnection transition.

Each call will now be reported by the consumption API.
---
 .../TestTemplateItem/testSlapOSSlapTool.py    | 58 +++++++++++++++----
 master/bt5/slapos_slap_tool/bt/revision       |  2 +-
 master/product/Vifib/Tool/SlapTool.py         |  2 +-
 3 files changed, 48 insertions(+), 14 deletions(-)

diff --git a/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py b/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py
index baf340251..f82556e43 100644
--- a/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py
+++ b/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py
@@ -1006,6 +1006,14 @@ class TestSlapOSSlapToolInstanceAccess(TestSlapOSSlapToolMixin):
     self.assertEqual(expected_xml, got_xml,
         '\n'.join([q for q in difflib.unified_diff(expected_xml.split('\n'), got_xml.split('\n'))]))
 
+  def assertInstanceUpdateConnectionSimulator(self, args, kwargs):
+    stored = eval(open(self.instance_update_connection_simulator).read())
+    # do the same translation magic as in workflow
+    kwargs['connection_xml'] = kwargs.pop('connection_xml')
+    self.assertEqual(stored,
+      [{'recargs': args, 'reckwargs': kwargs,
+      'recmethod': 'updateConnection'}])
+
   def test_setConnectionXml_withSlave(self):
     self._makeComplexComputer(with_slave=True)
     partition_id = self.start_requested_software_instance.getAggregateValue(
@@ -1019,13 +1027,26 @@ class TestSlapOSSlapToolInstanceAccess(TestSlapOSSlapToolMixin):
     <string>v2</string>
   </dictionary>
 </marshal>"""
+    stored_xml = """<?xml version='1.0' encoding='utf-8'?>
+<instance>
+  <parameter id="p2">v2</parameter>
+  <parameter id="p1">v1</parameter>
+</instance>
+"""
     self.login(self.start_requested_software_instance.getReference())
-    response = self.portal_slap.setComputerPartitionConnectionXml(self.computer_id,
-      partition_id, connection_xml, slave_reference)
-    self.assertEqual('None', response)
-    self.assertEqual({'p2': 'v2', 'p1': 'v1'},
-      self.start_requested_slave_instance.getConnectionXmlAsDict()
-    )
+
+    self.instance_update_connection_simulator = tempfile.mkstemp()[1]
+    try:
+      self.start_requested_slave_instance.updateConnection = Simulator(
+        self.instance_update_connection_simulator, 'updateConnection')
+      response = self.portal_slap.setComputerPartitionConnectionXml(
+        self.computer_id, partition_id, connection_xml, slave_reference)
+      self.assertEqual('None', response)
+      self.assertInstanceUpdateConnectionSimulator((),
+          {'connection_xml': stored_xml})
+    finally:
+      if os.path.exists(self.instance_update_connection_simulator):
+        os.unlink(self.instance_update_connection_simulator)
 
   def test_setConnectionXml(self):
     self._makeComplexComputer()
@@ -1039,13 +1060,26 @@ class TestSlapOSSlapToolInstanceAccess(TestSlapOSSlapToolMixin):
     <string>v2</string>
   </dictionary>
 </marshal>"""
+    stored_xml = """<?xml version='1.0' encoding='utf-8'?>
+<instance>
+  <parameter id="p2">v2</parameter>
+  <parameter id="p1">v1</parameter>
+</instance>
+"""
     self.login(self.start_requested_software_instance.getReference())
-    response = self.portal_slap.setComputerPartitionConnectionXml(self.computer_id,
-      partition_id, connection_xml)
-    self.assertEqual('None', response)
-    self.assertEqual({'p2': 'v2', 'p1': 'v1'},
-      self.start_requested_software_instance.getConnectionXmlAsDict()
-    )
+
+    self.instance_update_connection_simulator = tempfile.mkstemp()[1]
+    try:
+      self.start_requested_software_instance.updateConnection = Simulator(
+        self.instance_update_connection_simulator, 'updateConnection')
+      response = self.portal_slap.setComputerPartitionConnectionXml(
+          self.computer_id, partition_id, connection_xml)
+      self.assertEqual('None', response)
+      self.assertInstanceUpdateConnectionSimulator((),
+          {'connection_xml': stored_xml})
+    finally:
+      if os.path.exists(self.instance_update_connection_simulator):
+        os.unlink(self.instance_update_connection_simulator)
 
   def test_softwareInstanceError(self):
     self._makeComplexComputer()
diff --git a/master/bt5/slapos_slap_tool/bt/revision b/master/bt5/slapos_slap_tool/bt/revision
index 25bf17fc5..dec2bf5d6 100644
--- a/master/bt5/slapos_slap_tool/bt/revision
+++ b/master/bt5/slapos_slap_tool/bt/revision
@@ -1 +1 @@
-18
\ No newline at end of file
+19
\ No newline at end of file
diff --git a/master/product/Vifib/Tool/SlapTool.py b/master/product/Vifib/Tool/SlapTool.py
index e86fcb27c..39c377cf0 100644
--- a/master/product/Vifib/Tool/SlapTool.py
+++ b/master/product/Vifib/Tool/SlapTool.py
@@ -1023,7 +1023,7 @@ class SlapTool(BaseTool):
                                   xml_declaration=True, encoding='utf-8')
     reference = software_instance.getReference()
     if self._getLastData(reference) != connection_xml:
-      software_instance.edit(
+      software_instance.updateConnection(
         connection_xml=connection_xml,
       )
       self._storeLastData(reference, connection_xml)
-- 
2.30.9