Merge "Disassociate fip before reuse it" into mcp/epoxy
diff --git a/tempest/scenario/test_server_basic_ops.py b/tempest/scenario/test_server_basic_ops.py
index f2249f2..ce1f43b 100644
--- a/tempest/scenario/test_server_basic_ops.py
+++ b/tempest/scenario/test_server_basic_ops.py
@@ -13,6 +13,10 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import base64
+import gzip
+import testtools
+
 from oslo_serialization import jsonutils as json
 
 from tempest.common import utils
@@ -141,6 +145,52 @@
         waiters.wait_for_server_termination(
             self.servers_client, self.instance['id'], ignore_error=False)
 
+    @decorators.idempotent_id('372939d1-2a96-4985-9360-7b222373107b')
+    @testtools.skipIf(
+        not CONF.compute_feature_enabled.metadata_service,
+        'Metadata service is disabled')
+    @utils.services('compute', 'network')
+    def test_gzipped_user_data(self):
+        """Create a server with gzipped user data.
+
+        Verifies that a server with gzipped user data can be
+        successfully created and the user_data can be obtained from Neutron
+        metadata agent.
+
+        """
+        # Prepare user_data shell script to be executed in the instance
+        # upon boot
+        user_data_script = "#!/bin/sh\necho 'gzipped user data' > /tmp/test"
+        gzipped_data = gzip.compress(user_data_script.encode('utf-8'))
+        encoded_user_data = base64.b64encode(gzipped_data).decode('utf-8')
+
+        # Create a test server
+        keypair = self.create_keypair()
+        security_group = self.create_security_group()
+        self.instance = self.create_server(
+            keypair=keypair,
+            wait_until='SSHABLE',
+            security_groups=[{'name': security_group['name']}],
+            user_data=encoded_user_data)
+
+        server_ip = self.get_server_ip(self.instance)
+        ssh_client = self.get_remote_client(
+            ip_address=server_ip,
+            username=self.ssh_user,
+            private_key=keypair['private_key'],
+            server=self.instance)
+
+        # Check test data and user_data script created upon instance boot
+        output = ssh_client.exec_command(
+            'cat /tmp/test'
+        )
+        self.assertEqual('gzipped user data\n', output,
+                         'Failed to check gzipped user data')
+        curl_request = ssh_client.exec_command(
+            'curl http://169.254.169.254/openstack/latest/user_data')
+        self.assertEqual(user_data_script, curl_request,
+                         'Failed to check user_data script')
+
 
 class TestServerBasicOpsRaw(TestServerBasicOpsBase):