diff --git a/tests/itests/README.md b/tests/itests/README.md
index f2d275a..f424a2e 100644
--- a/tests/itests/README.md
+++ b/tests/itests/README.md
@@ -82,7 +82,7 @@
 * **Device_state_changes**: This tests uses the ponsim OLT and ONUs to exercise 
 the device state changes (preprovisioning, enabled, disabled, reboot). 
 It exercises the following areas:
-    * Chameleon REST interface 
+    * Envoy REST interface 
     * Voltha GRPC interface
     * Voltha data model and business logic
     * Ponsim_olt and Ponsim_onu adapters
@@ -133,7 +133,7 @@
 nosetests -s tests/itests/voltha/test_persistence.py
 ```  
 
-* **Voltha_rest_apis**: This test exercises the Chameleon REST interface and 
+* **Voltha_rest_apis**: This test exercises the Envoy REST interface and 
 indirectly
  the Voltha GPRC interface as well.  It tests both the Local and the Global 
  interfaces.
diff --git a/tests/itests/docutests/build_md_test.py b/tests/itests/docutests/build_md_test.py
index 4e6c2d9..133736e 100644
--- a/tests/itests/docutests/build_md_test.py
+++ b/tests/itests/docutests/build_md_test.py
@@ -414,7 +414,7 @@
             # the list obtained from docker composed
             print "Verify all services are registered in consul ..."
             expected_services = ['consul-rest', 'fluentd-intake',
-                                 'chameleon-rest', 'voltha-grpc',
+                                 'voltha-grpc',
                                  'voltha-health',
                                  'consul-8600', 'zookeeper', 'consul',
                                  'kafka']
@@ -484,7 +484,7 @@
                   "..."
             expected_output = ['voltha_1', 'fluentd_1', 'consul_1',
                                'registrator_1', 'kafka_1', 'zookeeper_1',
-                               'chameleon_1', 'ofagent_1', 'netconf_1']
+                               'ofagent_1', 'netconf_1']
             cmd = command_defs['docker_compose_logs']
             docker_compose_logs = run_long_running_command_with_timeout(cmd, 5,
                                                                         0)
diff --git a/tests/itests/voltha/test_device_state_changes.py b/tests/itests/voltha/test_device_state_changes.py
index 1b97136..93685ca 100644
--- a/tests/itests/voltha/test_device_state_changes.py
+++ b/tests/itests/voltha/test_device_state_changes.py
@@ -75,7 +75,7 @@
         self.simulate_eapol_flow_install(ldev_id, olt_id, onu_ids)
         self.verify_olt_eapol_flow(olt_id)
         self.disable_device(onu_ids[0])
-        self.delete_device(onu_ids[0])
+        # self.delete_device(onu_ids[0])
         self.verify_logical_ports(ldev_id, 4)
         self.disable_device(olt_ids[0])
         self.delete_device(olt_ids[0])
diff --git a/tests/itests/voltha/test_dispatcher.py b/tests/itests/voltha/test_dispatcher.py
index 5766640..38bf233 100644
--- a/tests/itests/voltha/test_dispatcher.py
+++ b/tests/itests/voltha/test_dispatcher.py
@@ -360,19 +360,12 @@
         out, err, rc = run_command_to_completion_with_raw_stdout(cmd)
         self.assertEqual(rc, 0)
 
-        self.pt("Waiting for voltha and chameleon containers to be ready ...")
+        self.pt("Waiting for voltha container to be ready ...")
         self.wait_till('voltha services HEALTHY',
                        lambda: verify_all_services_healthy(
                            LOCAL_CONSUL, service_name='voltha-grpc') == True,
                        timeout=10)
-        self.wait_till('chameleon services HEALTHY',
-                       lambda: verify_all_services_healthy(
-                           LOCAL_CONSUL,
-                           service_name='chameleon-rest') == True,
-                       timeout=10)
 
-        # Chameleon takes some time to compile the protos and make them
-        # available.  So let's wait 10 seconds
         sleep(10)
 
     def set_rest_endpoint(self):
diff --git a/tests/itests/voltha/test_persistence.py b/tests/itests/voltha/test_persistence.py
index 3ee7424..54f091d 100644
--- a/tests/itests/voltha/test_persistence.py
+++ b/tests/itests/voltha/test_persistence.py
@@ -276,12 +276,6 @@
         except Exception as e:
             self.pt('get-devices-fail expected')
         # Wait for everything to settle
-        self.wait_till('chameleon service HEALTHY',
-                       lambda: verify_all_services_healthy(LOCAL_CONSUL,
-                                                           service_name='chameleon-rest') == True,
-                       timeout=30)
-        # Chameleon takes some time to compile the protos and make them
-        # available.  So let's wait 10 seconds
         sleep(10)
         # Update the REST endpoint info
         self.set_rest_endpoint()
@@ -313,18 +307,11 @@
         out, err, rc = run_command_to_completion_with_raw_stdout(cmd)
         self.assertEqual(rc, 0)
 
-        self.pt("Waiting for voltha and chameleon containers to be ready ...")
+        self.pt("Waiting for voltha container to be ready ...")
         self.wait_till('voltha services HEALTHY',
                        lambda: verify_all_services_healthy(LOCAL_CONSUL,
                                                            service_name='vcore-grpc') == True,
                        timeout=10)
-        self.wait_till('chameleon services HEALTHY',
-                       lambda: verify_all_services_healthy(LOCAL_CONSUL,
-                                                           service_name='chameleon-rest') == True,
-                       timeout=10)
-
-        # Chameleon takes some time to compile the protos and make them
-        # available.  So let's wait 10 seconds
         sleep(10)
 
     def start_voltha(self):
diff --git a/tests/itests/voltha/test_self_signed_cert_auth_failure.py b/tests/itests/voltha/test_self_signed_cert_auth_failure.py
index 2c9009b..c04fe00 100644
--- a/tests/itests/voltha/test_self_signed_cert_auth_failure.py
+++ b/tests/itests/voltha/test_self_signed_cert_auth_failure.py
@@ -69,18 +69,12 @@
         out, err, rc = run_command_to_completion_with_raw_stdout(cmd)
         self.assertEqual(rc, 0)
 
-        self.pt("Waiting for voltha and chameleon containers to be ready ...")
+        self.pt("Waiting for voltha container to be ready ...")
         self.wait_till('voltha services HEALTHY',
                        lambda: verify_all_services_healthy(
                            LOCAL_CONSUL, service_name='voltha-grpc') == True,
                        timeout=10)
-        self.wait_till('chameleon services HEALTHY',
-                       lambda: verify_all_services_healthy(
-                           LOCAL_CONSUL,service_name='envoy-8443') == True,
-                       timeout=10)
 
-        # Chameleon takes some time to compile the protos and make them
-        # available.  So let's wait 10 seconds
         sleep(10)
 
     def set_rest_endpoint(self):
diff --git a/tests/utests/chameleon/__init__.py b/tests/utests/chameleon/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tests/utests/chameleon/__init__.py
+++ /dev/null
diff --git a/tests/utests/chameleon/protoc_plugins/__init__.py b/tests/utests/chameleon/protoc_plugins/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tests/utests/chameleon/protoc_plugins/__init__.py
+++ /dev/null
diff --git a/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.native.json b/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.native.json
deleted file mode 100644
index c9b6800..0000000
--- a/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.native.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name": "a_bit_of_everything.proto", "package": "grpc.gateway.examples.examplepb", "dependency": ["google/api/annotations.proto", "google/protobuf/empty.proto", "examples/sub/message.proto", "examples/sub2/message.proto", "google/protobuf/timestamp.proto"], "message_type": [{"name": "ABitOfEverything", "field": [{"name": "single_nested", "number": 25, "label": 1, "type": 11, "type_name": "grpc.gateway.examples.examplepb.ABitOfEverything.Nested", "json_name": "singleNested", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "uuid", "number": 1, "label": 1, "type": 9, "json_name": "uuid", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "nested", "number": 2, "label": 3, "type": 11, "type_name": "grpc.gateway.examples.examplepb.ABitOfEverything.Nested", "json_name": "nested", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "float_value", "number": 3, "label": 1, "type": 2, "json_name": "floatValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "double_value", "number": 4, "label": 1, "type": 1, "json_name": "doubleValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "int64_value", "number": 5, "label": 1, "type": 3, "json_name": "int64Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "uint64_value", "number": 6, "label": 1, "type": 4, "json_name": "uint64Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "int32_value", "number": 7, "label": 1, "type": 5, "json_name": "int32Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "fixed64_value", "number": 8, "label": 1, "type": 6, "json_name": "fixed64Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "fixed32_value", "number": 9, "label": 1, "type": 7, "json_name": "fixed32Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "bool_value", "number": 10, "label": 1, "type": 8, "json_name": "boolValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "string_value", "number": 11, "label": 1, "type": 9, "json_name": "stringValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "uint32_value", "number": 13, "label": 1, "type": 13, "json_name": "uint32Value", "_type": "google.protobuf.FieldDescriptorProto", "_description": "TODO(yugui) add bytes_value"}, {"name": "enum_value", "number": 14, "label": 1, "type": 14, "type_name": "grpc.gateway.examples.examplepb.NumericEnum", "json_name": "enumValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "sfixed32_value", "number": 15, "label": 1, "type": 15, "json_name": "sfixed32Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "sfixed64_value", "number": 16, "label": 1, "type": 16, "json_name": "sfixed64Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "sint32_value", "number": 17, "label": 1, "type": 17, "json_name": "sint32Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "sint64_value", "number": 18, "label": 1, "type": 18, "json_name": "sint64Value", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "repeated_string_value", "number": 19, "label": 3, "type": 9, "json_name": "repeatedStringValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "oneof_empty", "number": 20, "label": 1, "type": 11, "type_name": "google.protobuf.Empty", "oneof_index": 0, "json_name": "oneofEmpty", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "oneof_string", "number": 21, "label": 1, "type": 9, "oneof_index": 0, "json_name": "oneofString", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "map_value", "number": 22, "label": 3, "type": 11, "type_name": "grpc.gateway.examples.examplepb.ABitOfEverything.MapValueEntry", "json_name": "mapValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "mapped_string_value", "number": 23, "label": 3, "type": 11, "type_name": "grpc.gateway.examples.examplepb.ABitOfEverything.MappedStringValueEntry", "json_name": "mappedStringValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "mapped_nested_value", "number": 24, "label": 3, "type": 11, "type_name": "grpc.gateway.examples.examplepb.ABitOfEverything.MappedNestedValueEntry", "json_name": "mappedNestedValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "nonConventionalNameValue", "number": 26, "label": 1, "type": 9, "json_name": "nonConventionalNameValue", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "timestamp_value", "number": 27, "label": 1, "type": 11, "type_name": "google.protobuf.Timestamp", "json_name": "timestampValue", "_type": "google.protobuf.FieldDescriptorProto"}], "nested_type": [{"name": "Nested", "field": [{"name": "name", "number": 1, "label": 1, "type": 9, "json_name": "name", "_type": "google.protobuf.FieldDescriptorProto", "_description": "name is nested field."}, {"name": "amount", "number": 2, "label": 1, "type": 13, "json_name": "amount", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "ok", "number": 3, "label": 1, "type": 14, "type_name": "grpc.gateway.examples.examplepb.ABitOfEverything.Nested.DeepEnum", "json_name": "ok", "_type": "google.protobuf.FieldDescriptorProto"}], "enum_type": [{"name": "DeepEnum", "value": [{"name": "FALSE", "number": 0, "_type": "google.protobuf.EnumValueDescriptorProto", "_description": "FALSE is false."}, {"name": "TRUE", "number": 1, "_type": "google.protobuf.EnumValueDescriptorProto", "_description": "TRUE is true."}], "_type": "google.protobuf.EnumDescriptorProto", "_description": "DeepEnum is one or zero."}], "_type": "google.protobuf.DescriptorProto", "_description": "Nested is nested type."}, {"name": "MapValueEntry", "field": [{"name": "key", "number": 1, "label": 1, "type": 9, "json_name": "key", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "value", "number": 2, "label": 1, "type": 14, "type_name": "grpc.gateway.examples.examplepb.NumericEnum", "json_name": "value", "_type": "google.protobuf.FieldDescriptorProto"}], "options": {"map_entry": true, "_type": "google.protobuf.MessageOptions"}, "_type": "google.protobuf.DescriptorProto"}, {"name": "MappedStringValueEntry", "field": [{"name": "key", "number": 1, "label": 1, "type": 9, "json_name": "key", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "value", "number": 2, "label": 1, "type": 9, "json_name": "value", "_type": "google.protobuf.FieldDescriptorProto"}], "options": {"map_entry": true, "_type": "google.protobuf.MessageOptions"}, "_type": "google.protobuf.DescriptorProto"}, {"name": "MappedNestedValueEntry", "field": [{"name": "key", "number": 1, "label": 1, "type": 9, "json_name": "key", "_type": "google.protobuf.FieldDescriptorProto"}, {"name": "value", "number": 2, "label": 1, "type": 11, "type_name": "grpc.gateway.examples.examplepb.ABitOfEverything.Nested", "json_name": "value", "_type": "google.protobuf.FieldDescriptorProto"}], "options": {"map_entry": true, "_type": "google.protobuf.MessageOptions"}, "_type": "google.protobuf.DescriptorProto"}], "oneof_decl": [{"name": "oneof_value", "_type": "google.protobuf.OneofDescriptorProto"}], "_type": "google.protobuf.DescriptorProto", "_description": "Intentionaly complicated message type to cover much features of Protobuf.\n NEXT ID: 27"}], "enum_type": [{"name": "NumericEnum", "value": [{"name": "ZERO", "number": 0, "_type": "google.protobuf.EnumValueDescriptorProto", "_description": "ZERO means 0"}, {"name": "ONE", "number": 1, "_type": "google.protobuf.EnumValueDescriptorProto", "_description": "ONE means 1"}], "_type": "google.protobuf.EnumDescriptorProto", "_description": "NumericEnum is one or zero."}], "service": [{"name": "ABitOfEverythingService", "method": [{"name": "Create", "input_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "output_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "options": {"http": {"post": "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}", "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}, {"name": "CreateBody", "input_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "output_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "options": {"http": {"post": "/v1/example/a_bit_of_everything", "body": "*", "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}, {"name": "Lookup", "input_type": "sub2.IdMessage", "output_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "options": {"http": {"get": "/v1/example/a_bit_of_everything/{uuid}", "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}, {"name": "Update", "input_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "output_type": "google.protobuf.Empty", "options": {"http": {"put": "/v1/example/a_bit_of_everything/{uuid}", "body": "*", "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}, {"name": "Delete", "input_type": "sub2.IdMessage", "output_type": "google.protobuf.Empty", "options": {"http": {"delete": "/v1/example/a_bit_of_everything/{uuid}", "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}, {"name": "Echo", "input_type": "grpc.gateway.examples.sub.StringMessage", "output_type": "grpc.gateway.examples.sub.StringMessage", "options": {"http": {"get": "/v1/example/a_bit_of_everything/echo/{value}", "additional_bindings": [{"post": "/v2/example/echo", "body": "value", "_type": "google.api.HttpRule"}, {"get": "/v2/example/echo", "_type": "google.api.HttpRule"}], "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}, {"name": "DeepPathEcho", "input_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "output_type": "grpc.gateway.examples.examplepb.ABitOfEverything", "options": {"http": {"post": "/v1/example/a_bit_of_everything/{single_nested.name}", "body": "*", "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}, {"name": "Timeout", "input_type": "google.protobuf.Empty", "output_type": "google.protobuf.Empty", "options": {"http": {"get": "/v2/example/timeout", "_type": "google.api.HttpRule"}, "_type": "google.protobuf.MethodOptions"}, "_type": "google.protobuf.MethodDescriptorProto"}], "_type": "google.protobuf.ServiceDescriptorProto"}], "options": {"go_package": "examplepb", "_type": "google.protobuf.FileOptions"}, "syntax": "proto3", "_type": "google.protobuf.FileDescriptorProto"}
diff --git a/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.proto b/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.proto
deleted file mode 100644
index bb375bb..0000000
--- a/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.proto
+++ /dev/null
@@ -1,122 +0,0 @@
-syntax = "proto3";
-package examples.example;
-
-import "google/api/annotations.proto";
-import "google/protobuf/empty.proto";
-import "sub.proto";
-import "sub2.proto";
-import "google/protobuf/timestamp.proto";
-
-// Intentionaly complicated message type to cover much features of Protobuf.
-// NEXT ID: 27
-message ABitOfEverything {
-	// Nested is nested type.
-	message Nested {
-		// name is nested field.
-		string name = 1;
-		uint32 amount = 2;
-		// DeepEnum is one or zero.
-		enum DeepEnum {
-			// FALSE is false.
-			FALSE = 0;
-			// TRUE is true.
-			TRUE = 1;
-		}
-		DeepEnum ok = 3;
-	}
-	Nested single_nested = 25;
-
-	string uuid = 1;
-	repeated Nested nested = 2;
-	float float_value = 3;
-	double double_value = 4;
-	int64 int64_value = 5;
-	uint64 uint64_value = 6;
-	int32 int32_value = 7;
-	fixed64 fixed64_value = 8;
-	fixed32 fixed32_value = 9;
-	bool bool_value = 10;
-	string string_value = 11;
-	// TODO(yugui) add bytes_value
-	uint32 uint32_value = 13;
-	NumericEnum enum_value = 14;
-	sfixed32 sfixed32_value = 15;
-	sfixed64 sfixed64_value = 16;
-	sint32 sint32_value = 17;
-	sint64 sint64_value = 18;
-	repeated string repeated_string_value = 19;
-	oneof oneof_value {
-		google.protobuf.Empty oneof_empty = 20;
-		string oneof_string = 21;
-	}
-
-	map<string, NumericEnum> map_value = 22;
-	map<string, string> mapped_string_value = 23;
-	map<string, Nested> mapped_nested_value = 24;
-
-	string nonConventionalNameValue = 26;
-
-	google.protobuf.Timestamp timestamp_value = 27;
-}
-
-// NumericEnum is one or zero.
-enum NumericEnum {
-	// ZERO means 0
-	ZERO = 0;
-	// ONE means 1
-	ONE  = 1;
-}
-
-service ABitOfEverythingService {
-	rpc Create(ABitOfEverything) returns (ABitOfEverything) {
-		// TODO add enum_value
-		option (google.api.http) = {
-			post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}"
-		};
-	}
-	rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) {
-		option (google.api.http) = {
-			post: "/v1/example/a_bit_of_everything"
-			body: "*"
-		};
-	}
-	rpc Lookup(sub2.IdMessage) returns (ABitOfEverything) {
-		option (google.api.http) = {
-			get: "/v1/example/a_bit_of_everything/{uuid}"
-		};
-	}
-	rpc Update(ABitOfEverything) returns (google.protobuf.Empty) {
-		option (google.api.http) = {
-			put: "/v1/example/a_bit_of_everything/{uuid}"
-			body: "*"
-		};
-	}
-	rpc Delete(sub2.IdMessage) returns (google.protobuf.Empty) {
-		option (google.api.http) = {
-			delete: "/v1/example/a_bit_of_everything/{uuid}"
-		};
-	}
-	rpc Echo(examples.sub.StringMessage) returns (examples.sub.StringMessage) {
-		option (google.api.http) = {
-			get: "/v1/example/a_bit_of_everything/echo/{value}"
-			additional_bindings {
-				post: "/v2/example/echo"
-				body: "value"
-			}
-			additional_bindings {
-				get: "/v2/example/echo"
-			}
-		};
-	}
-	rpc DeepPathEcho(ABitOfEverything) returns (ABitOfEverything) {
-		option (google.api.http) = {
-			post: "/v1/example/a_bit_of_everything/{single_nested.name}"
-			body: "*"
-		};
-	}
-	rpc Timeout(google.protobuf.Empty) returns (google.protobuf.Empty) {
-		option (google.api.http) = {
-			get: "/v2/example/timeout",
-		};
-	}
-}
diff --git a/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.swagger.json b/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.swagger.json
deleted file mode 100644
index 35bbca5..0000000
--- a/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.swagger.json
+++ /dev/null
@@ -1,541 +0,0 @@
-{
-  "swagger": "2.0",
-  "info": {
-    "title": "test.proto",
-    "version": "version not set"
-  },
-  "schemes": [
-    "http",
-    "https"
-  ],
-  "consumes": [
-    "application/json"
-  ],
-  "produces": [
-    "application/json"
-  ],
-  "paths": {
-    "/v1/example/a_bit_of_everything": {
-      "post": {
-        "operationId": "CreateBody",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/examples.example.ABitOfEverything"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "body",
-            "in": "body",
-            "required": true,
-            "schema": {
-              "$ref": "#/definitions/examples.example.ABitOfEverything"
-            }
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      }
-    },
-    "/v1/example/a_bit_of_everything/echo/{value}": {
-      "get": {
-        "operationId": "Echo",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/examples.sub.StringMessage"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "value",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "string"
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      }
-    },
-    "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}": {
-      "post": {
-        "operationId": "Create",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/examples.example.ABitOfEverything"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "float_value",
-            "in": "path",
-            "required": true,
-            "type": "number",
-            "format": "float"
-          },
-          {
-            "name": "double_value",
-            "in": "path",
-            "required": true,
-            "type": "number",
-            "format": "double"
-          },
-          {
-            "name": "int64_value",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "int64"
-          },
-          {
-            "name": "uint64_value",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "uint64"
-          },
-          {
-            "name": "int32_value",
-            "in": "path",
-            "required": true,
-            "type": "integer",
-            "format": "int32"
-          },
-          {
-            "name": "fixed64_value",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "uint64"
-          },
-          {
-            "name": "fixed32_value",
-            "in": "path",
-            "required": true,
-            "type": "integer",
-            "format": "int64"
-          },
-          {
-            "name": "bool_value",
-            "in": "path",
-            "required": true,
-            "type": "boolean",
-            "format": "boolean"
-          },
-          {
-            "name": "string_value",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "string"
-          },
-          {
-            "name": "uint32_value",
-            "in": "path",
-            "required": true,
-            "type": "integer",
-            "format": "int64"
-          },
-          {
-            "name": "sfixed32_value",
-            "in": "path",
-            "required": true,
-            "type": "integer",
-            "format": "int32"
-          },
-          {
-            "name": "sfixed64_value",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "int64"
-          },
-          {
-            "name": "sint32_value",
-            "in": "path",
-            "required": true,
-            "type": "integer",
-            "format": "int32"
-          },
-          {
-            "name": "sint64_value",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "int64"
-          },
-          {
-            "name": "nonConventionalNameValue",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "string"
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      }
-    },
-    "/v1/example/a_bit_of_everything/{single_nested.name}": {
-      "post": {
-        "operationId": "DeepPathEcho",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/examples.example.ABitOfEverything"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "single_nested.name",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "string"
-          },
-          {
-            "name": "body",
-            "in": "body",
-            "required": true,
-            "schema": {
-              "$ref": "#/definitions/examples.example.ABitOfEverything"
-            }
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      }
-    },
-    "/v1/example/a_bit_of_everything/{uuid}": {
-      "get": {
-        "operationId": "Lookup",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/examples.example.ABitOfEverything"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "uuid",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "string"
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      },
-      "delete": {
-        "operationId": "Delete",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/google.protobuf.Empty"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "uuid",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "string"
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      },
-      "put": {
-        "operationId": "Update",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/google.protobuf.Empty"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "uuid",
-            "in": "path",
-            "required": true,
-            "type": "string",
-            "format": "string"
-          },
-          {
-            "name": "body",
-            "in": "body",
-            "required": true,
-            "schema": {
-              "$ref": "#/definitions/examples.example.ABitOfEverything"
-            }
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      }
-    },
-    "/v2/example/echo": {
-      "get": {
-        "operationId": "Echo",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/examples.sub.StringMessage"
-            }
-          }
-        },
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      },
-      "post": {
-        "operationId": "Echo",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/examples.sub.StringMessage"
-            }
-          }
-        },
-        "parameters": [
-          {
-            "name": "body",
-            "in": "body",
-            "required": true,
-            "schema": {
-              "$ref": "#/definitions/examples.sub.StringMessage"
-            }
-          }
-        ],
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      }
-    },
-    "/v2/example/timeout": {
-      "get": {
-        "operationId": "Timeout",
-        "responses": {
-          "200": {
-            "description": "",
-            "schema": {
-              "$ref": "#/definitions/google.protobuf.Empty"
-            }
-          }
-        },
-        "tags": [
-          "ABitOfEverythingService"
-        ]
-      }
-    }
-  },
-  "definitions": {
-    "examples.example.ABitOfEverything.Nested": {
-      "type": "object",
-      "properties": {
-        "amount": {
-          "type": "integer",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "format": "string",
-          "description": "name is nested field."
-        },
-        "ok": {
-          "$ref": "#/definitions/examples.example.ABitOfEverything.Nested.DeepEnum"
-        }
-      },
-      "description": "Nested is nested type."
-    },
-    "examples.example.ABitOfEverything.Nested.DeepEnum": {
-      "type": "string",
-      "enum": [
-        "FALSE",
-        "TRUE"
-      ],
-      "default": "FALSE",
-      "description": "DeepEnum is one or zero.\nValid values:\n - FALSE: FALSE is false.\n - TRUE: TRUE is true."
-    },
-    "examples.example.ABitOfEverything": {
-      "type": "object",
-      "properties": {
-        "bool_value": {
-          "type": "boolean",
-          "format": "boolean"
-        },
-        "double_value": {
-          "type": "number",
-          "format": "double"
-        },
-        "enum_value": {
-          "$ref": "#/definitions/examples.example.NumericEnum"
-        },
-        "fixed32_value": {
-          "type": "integer",
-          "format": "int64"
-        },
-        "fixed64_value": {
-          "type": "string",
-          "format": "uint64"
-        },
-        "float_value": {
-          "type": "number",
-          "format": "float"
-        },
-        "int32_value": {
-          "type": "integer",
-          "format": "int32"
-        },
-        "int64_value": {
-          "type": "string",
-          "format": "int64"
-        },
-        "map_value": {
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "#/definitions/examples.example.NumericEnum"
-          }
-        },
-        "mapped_nested_value": {
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "#/definitions/examples.example.ABitOfEverything.Nested"
-          }
-        },
-        "mapped_string_value": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string",
-            "format": "string"
-          }
-        },
-        "nested": {
-          "type": "array",
-          "items": {
-            "$ref": "#/definitions/examples.example.ABitOfEverything.Nested"
-          }
-        },
-        "nonConventionalNameValue": {
-          "type": "string",
-          "format": "string"
-        },
-        "oneof_empty": {
-          "$ref": "#/definitions/google.protobuf.Empty"
-        },
-        "oneof_string": {
-          "type": "string",
-          "format": "string"
-        },
-        "repeated_string_value": {
-          "type": "array",
-          "items": {
-            "type": "string",
-            "format": "string"
-          }
-        },
-        "sfixed32_value": {
-          "type": "integer",
-          "format": "int32"
-        },
-        "sfixed64_value": {
-          "type": "string",
-          "format": "int64"
-        },
-        "single_nested": {
-          "$ref": "#/definitions/examples.example.ABitOfEverything.Nested"
-        },
-        "sint32_value": {
-          "type": "integer",
-          "format": "int32"
-        },
-        "sint64_value": {
-          "type": "string",
-          "format": "int64"
-        },
-        "string_value": {
-          "type": "string",
-          "format": "string"
-        },
-        "timestamp_value": {
-          "type": "string",
-          "format": "date-time"
-        },
-        "uint32_value": {
-          "type": "integer",
-          "format": "int64",
-          "description": "TODO(yugui) add bytes_value"
-        },
-        "uint64_value": {
-          "type": "string",
-          "format": "uint64"
-        },
-        "uuid": {
-          "type": "string",
-          "format": "string"
-        }
-      },
-      "description": "Intentionaly complicated message type to cover much features of Protobuf.\n NEXT ID: 27"
-    },
-    "examples.example.NumericEnum": {
-      "type": "string",
-      "enum": [
-        "ZERO",
-        "ONE"
-      ],
-      "default": "ZERO",
-      "description": "NumericEnum is one or zero.\nValid values:\n - ZERO: ZERO means 0\n - ONE: ONE means 1"
-    },
-    "google.protobuf.Empty": {
-      "type": "object",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\n empty messages in your APIs. A typical example is to use it as the request\n or the response type of an API method. For instance:\n\n     service Foo {\n       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n     }\n\n The JSON representation for `Empty` is empty JSON object `{}`."
-    },
-    "sub2.IdMessage": {
-      "type": "object",
-      "properties": {
-        "uuid": {
-          "type": "string",
-          "format": "string"
-        }
-      }
-    },
-    "examples.sub.StringMessage": {
-      "type": "object",
-      "properties": {
-        "value": {
-          "type": "string",
-          "format": "string"
-        }
-      }
-    }
-  }
-}
diff --git a/tests/utests/chameleon/protoc_plugins/descriptor_parser_test.py b/tests/utests/chameleon/protoc_plugins/descriptor_parser_test.py
deleted file mode 100644
index ada7e54..0000000
--- a/tests/utests/chameleon/protoc_plugins/descriptor_parser_test.py
+++ /dev/null
@@ -1,270 +0,0 @@
-#
-# Copyright 2016 the original author or authors.
-#
-# 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.
-#
-from unittest import TestCase
-
-from chameleon.protoc_plugins.descriptor_parser import DescriptorParser
-from tests.utests.chameleon.protoc_plugins.test_utils import \
-    generate_plugin_request, json_rt
-from tests.utests.chameleon.protoc_plugins.test_utils import unindent
-
-
-class DescriptorParserTests(TestCase):
-
-    maxDiff = 10000
-
-    def test_empty(self):
-
-        proto = unindent("""
-        syntax = "proto3";
-        package test;
-        """)
-
-        expected = dict(
-            syntax='proto3',
-            name='test.proto',
-            package='test',
-            source_code_info=dict(
-                location=[
-                    dict(span=[1, 0, 2, 13]),
-                    dict(span=[1, 0, 18], path=[12]),
-                    dict(span=[2, 8, 12], path=[2])
-                ]
-            )
-        )
-
-        request = generate_plugin_request(proto)
-        assert len(request.proto_file) == 1
-        parser = DescriptorParser()
-        native_data = parser.parse_file_descriptor(request.proto_file[0])
-        self.assertEqual(native_data, expected)
-
-    def test_message_with_comment_folding(self):
-
-        proto = unindent("""
-        syntax = "proto3";
-        package test;
-
-        // Sample message
-        message SampleMessage {
-          string name = 1; // inline comment
-
-          // prefix comment
-          repeated int32 number = 2;
-
-          bool bool = 3;
-          // suffix comment
-        }
-        """)
-
-        expected = {
-            u'syntax': u'proto3',
-            u'name':  u'test.proto',
-            u'package': u'test',
-            u'message_type': [
-                {
-                    u'_description': u'Sample message',
-                    u'name': u'SampleMessage',
-                    u'field': [{
-                        u'_description': u'inline comment',
-                        u'json_name': u'name',
-                        u'name': u'name',
-                        u'label': 1,
-                        u'number': 1,
-                        u'type': 9
-                    }, {
-                        u'_description': u'prefix comment',
-                        u'json_name': u'number',
-                        u'name': u'number',
-                        u'label': 3,
-                        u'number': 2,
-                        u'type': 5
-                    }, {
-                        u'_description': u'suffix comment',
-                        u'json_name': u'bool',
-                        u'name': u'bool',
-                        u'label': 1,
-                        u'number': 3,
-                        u'type': 8
-                    }],
-                }
-            ]
-        }
-
-        request = generate_plugin_request(proto)
-        assert len(request.proto_file) == 1
-        parser = DescriptorParser()
-        native_data = parser.parse_file_descriptor(request.proto_file[0],
-                                                   fold_comments=True)
-        self.assertEqual(json_rt(native_data), expected)
-
-    def test_message_with_comment_folding_and_type_marking(self):
-
-        proto = unindent("""
-        syntax = "proto3";
-        package test;
-
-        // Sample message
-        message SampleMessage {
-          string name = 1; // inline comment
-
-          // prefix comment
-          repeated int32 number = 2;
-
-          bool bool = 3;
-          // suffix comment
-        }
-        """)
-
-        expected = {
-            u'syntax': u'proto3',
-            u'name':  u'test.proto',
-            u'package': u'test',
-            u'_type': u'google.protobuf.FileDescriptorProto',
-            u'message_type': [
-                {
-                    u'_type': u'google.protobuf.DescriptorProto',
-                    u'_description': u'Sample message',
-                    u'name': u'SampleMessage',
-                    u'field': [{
-                        u'_type': u'google.protobuf.FieldDescriptorProto',
-                        u'_description': u'inline comment',
-                        u'json_name': u'name',
-                        u'name': u'name',
-                        u'label': 1,
-                        u'number': 1,
-                        u'type': 9
-                    }, {
-                        u'_type': u'google.protobuf.FieldDescriptorProto',
-                        u'_description': u'prefix comment',
-                        u'json_name': u'number',
-                        u'name': u'number',
-                        u'label': 3,
-                        u'number': 2,
-                        u'type': 5
-                    }, {
-                        u'_type': u'google.protobuf.FieldDescriptorProto',
-                        u'_description': u'suffix comment',
-                        u'json_name': u'bool',
-                        u'name': u'bool',
-                        u'label': 1,
-                        u'number': 3,
-                        u'type': 8
-                    }],
-                }
-            ]
-        }
-
-        request = generate_plugin_request(proto)
-        assert len(request.proto_file) == 1
-        parser = DescriptorParser()
-        native_data = parser.parse_file_descriptor(request.proto_file[0],
-                                                   type_tag_name='_type',
-                                                   fold_comments=True)
-        self.assertEqual(json_rt(native_data), expected)
-
-    def test_http_annotations_carry_over(self):
-
-        proto = unindent("""
-        syntax = "proto3";
-        package test;
-        import "google/api/annotations.proto";
-        message Null {}
-        service Test {
-          rpc Call(Null) returns(Null) {
-            option (google.api.http) = {
-              get: "/some/path"
-            };
-          }
-        }
-        """)
-
-        expected = {
-            u'syntax': u'proto3',
-            u'name': u'test.proto',
-            u'package': u'test',
-            u'dependency': [u'google/api/annotations.proto'],
-            u'message_type': [{u'name': u'Null'}],
-            u'service': [{
-                u'name': u'Test',
-                u'method': [{
-                    u'name': u'Call',
-                    u'input_type': u'.test.Null',
-                    u'output_type': u'.test.Null',
-                    u'options': {
-                        u'http': {
-                            u'get': u'/some/path'
-                        }
-                    }
-                }]
-            }]
-        }
-
-        request = generate_plugin_request(proto)
-        assert len(request.proto_file) == 4
-        parser = DescriptorParser()
-        native_data = parser.parse_file_descriptor(request.proto_file[3],
-                                                   fold_comments=True)
-        self.assertEqual(json_rt(native_data), expected)
-
-    def test_http_annotations_carryover_and_all_components(self):
-
-        proto = unindent("""
-        syntax = "proto3";
-        package test;
-        import "google/api/annotations.proto";
-        message Null {}
-        service Test {
-          rpc Call(Null) returns(Null) {
-            option (google.api.http) = {
-              get: "/some/path"
-            };
-          }
-        }
-        """)
-
-        expected = {
-            u'syntax': 'proto3',
-            u'name': u'test.proto',
-            u'package': u'test',
-            u'dependency': [u'google/api/annotations.proto'],
-            u'message_type': [{u'name': u'Null'}],
-            u'service': [{
-                u'name': u'Test',
-                u'method': [{
-                    u'name': u'Call',
-                    u'input_type': u'.test.Null',
-                    u'output_type': u'.test.Null',
-                    u'options': {
-                        u'http': {
-                            u'get': u'/some/path'
-                        }
-                    }
-                }]
-            }]
-        }
-
-        request = generate_plugin_request(proto)
-        assert len(request.proto_file) == 4
-        parser = DescriptorParser()
-        native_data = parser.parse_file_descriptors(request.proto_file,
-                                                    fold_comments=True)
-        self.assertEqual([d['name'] for d in native_data], [
-            u'google/api/http.proto',
-            u'google/protobuf/descriptor.proto',
-            u'google/api/annotations.proto',
-            u'test.proto'
-        ])
-        self.assertEqual(json_rt(native_data[3]), expected)
diff --git a/tests/utests/chameleon/protoc_plugins/empty.native.json b/tests/utests/chameleon/protoc_plugins/empty.native.json
deleted file mode 100644
index e8ac6ba..0000000
--- a/tests/utests/chameleon/protoc_plugins/empty.native.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name": "google/protobuf/empty.proto", "package": "google.protobuf", "message_type": [{"name": "Empty", "_type": "google.protobuf.DescriptorProto", "_description": "A generic empty message that you can re-use to avoid defining duplicated\n empty messages in your APIs. A typical example is to use it as the request\n or the response type of an API method. For instance:\n\n     service Foo {\n       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n     }\n\n The JSON representation for `Empty` is empty JSON object `{}`."}], "options": {"java_package": "com.google.protobuf", "java_outer_classname": "EmptyProto", "java_multiple_files": true, "go_package": "github.com/golang/protobuf/ptypes/empty", "java_generate_equals_and_hash": true, "cc_enable_arenas": true, "objc_class_prefix": "GPB", "csharp_namespace": "Google.Protobuf.WellKnownTypes", "_type": "google.protobuf.FileOptions"}, "syntax": "proto3", "_type": "google.protobuf.FileDescriptorProto"}
\ No newline at end of file
diff --git a/tests/utests/chameleon/protoc_plugins/empty.swagger.json b/tests/utests/chameleon/protoc_plugins/empty.swagger.json
deleted file mode 100644
index dee6c59..0000000
--- a/tests/utests/chameleon/protoc_plugins/empty.swagger.json
+++ /dev/null
@@ -1 +0,0 @@
-{"info": {"version": "version not set", "title": "google/protobuf/empty.proto"}, "paths": {}, "schemes": ["http", "https"], "produces": ["application/json"], "definitions": {"google.protobuf.Empty": {"type": "object", "description": "A generic empty message that you can re-use to avoid defining duplicated\n empty messages in your APIs. A typical example is to use it as the request\n or the response type of an API method. For instance:\n\n     service Foo {\n       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n     }\n\n The JSON representation for `Empty` is empty JSON object `{}`.", "properties": {}}}, "swagger": "2.0", "consumes": ["application/json"]}
\ No newline at end of file
diff --git a/tests/utests/chameleon/protoc_plugins/null_plugin.py b/tests/utests/chameleon/protoc_plugins/null_plugin.py
deleted file mode 100755
index 9443304..0000000
--- a/tests/utests/chameleon/protoc_plugins/null_plugin.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2016 the original author or authors.
-#
-# 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.
-#
-
-"""
-Protoc plugin that simply emits the binary content of the CodeGeneratorRequest
-it is called with for each <name>.proto file. The name of the file the content
-is saved is protoc.request.
-"""
-import base64
-import sys
-
-from google.protobuf.compiler import plugin_pb2
-
-if __name__ == '__main__':
-    response = plugin_pb2.CodeGeneratorResponse()
-    f = response.file.add()
-    f.name = 'protoc.request'
-    f.content = base64.encodestring(sys.stdin.read())
-    sys.stdout.write(response.SerializeToString())
diff --git a/tests/utests/chameleon/protoc_plugins/sub.native.json b/tests/utests/chameleon/protoc_plugins/sub.native.json
deleted file mode 100644
index 460b84d..0000000
--- a/tests/utests/chameleon/protoc_plugins/sub.native.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name": "examples/sub/message.proto", "package": "grpc.gateway.examples.sub", "message_type": [{"name": "StringMessage", "field": [{"name": "value", "number": 1, "label": 2, "type": 9, "json_name": "value", "_type": "google.protobuf.FieldDescriptorProto"}], "_type": "google.protobuf.DescriptorProto"}], "options": {"go_package": "sub", "_type": "google.protobuf.FileOptions"}, "_type": "google.protobuf.FileDescriptorProto"}
\ No newline at end of file
diff --git a/tests/utests/chameleon/protoc_plugins/sub.proto b/tests/utests/chameleon/protoc_plugins/sub.proto
deleted file mode 100644
index d3f2462..0000000
--- a/tests/utests/chameleon/protoc_plugins/sub.proto
+++ /dev/null
@@ -1,6 +0,0 @@
-syntax = "proto2";
-package examples.sub;
-
-message StringMessage {
-	required string value = 1;
-}
diff --git a/tests/utests/chameleon/protoc_plugins/sub.swagger.json b/tests/utests/chameleon/protoc_plugins/sub.swagger.json
deleted file mode 100644
index 5a2f659..0000000
--- a/tests/utests/chameleon/protoc_plugins/sub.swagger.json
+++ /dev/null
@@ -1 +0,0 @@
-{"info": {"version": "version not set", "title": "examples/sub/message.proto"}, "paths": {}, "produces": ["application/json"], "definitions": {"grpc.gateway.examples.sub.StringMessage": {"description": "", "properties": {"value": {"format": "string", "type": "string"}}, "type": "object"}}, "swagger": "2.0", "consumes": ["application/json"], "schemes": ["http", "https"]}
diff --git a/tests/utests/chameleon/protoc_plugins/sub2.native.json b/tests/utests/chameleon/protoc_plugins/sub2.native.json
deleted file mode 100644
index 9ddf68f..0000000
--- a/tests/utests/chameleon/protoc_plugins/sub2.native.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name": "examples/sub2/message.proto", "package": "sub2", "message_type": [{"name": "IdMessage", "field": [{"name": "uuid", "number": 1, "label": 1, "type": 9, "json_name": "uuid", "_type": "google.protobuf.FieldDescriptorProto"}], "_type": "google.protobuf.DescriptorProto"}], "options": {"go_package": "github.com/grpc-ecosystem/grpc-gateway/examples/sub2", "_type": "google.protobuf.FileOptions"}, "syntax": "proto3", "_type": "google.protobuf.FileDescriptorProto"}
\ No newline at end of file
diff --git a/tests/utests/chameleon/protoc_plugins/sub2.proto b/tests/utests/chameleon/protoc_plugins/sub2.proto
deleted file mode 100644
index 7b98db0..0000000
--- a/tests/utests/chameleon/protoc_plugins/sub2.proto
+++ /dev/null
@@ -1,6 +0,0 @@
-syntax = "proto3";
-package sub2;
-
-message IdMessage {
-	string uuid = 1;
-}
diff --git a/tests/utests/chameleon/protoc_plugins/sub2.swagger.json b/tests/utests/chameleon/protoc_plugins/sub2.swagger.json
deleted file mode 100644
index 575e709..0000000
--- a/tests/utests/chameleon/protoc_plugins/sub2.swagger.json
+++ /dev/null
@@ -1 +0,0 @@
-{"info": {"version": "version not set", "title": "examples/sub2/message.proto"}, "paths": {}, "produces": ["application/json"], "definitions": {"sub2.IdMessage": {"description": "", "type": "object", "properties": {"uuid": {"format": "string", "type": "string"}}}}, "swagger": "2.0", "consumes": ["application/json"], "schemes": ["http", "https"]}
diff --git a/tests/utests/chameleon/protoc_plugins/swagger_template_test.py b/tests/utests/chameleon/protoc_plugins/swagger_template_test.py
deleted file mode 100644
index 577d070..0000000
--- a/tests/utests/chameleon/protoc_plugins/swagger_template_test.py
+++ /dev/null
@@ -1,1069 +0,0 @@
-#
-# Copyright 2016 the original author or authors.
-#
-# 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.
-#
-import json
-import os
-from unittest import TestCase
-from mock import Mock
-
-from chameleon.protoc_plugins.descriptor_parser import DescriptorParser
-from chameleon.protoc_plugins.swagger_template \
-    import native_descriptors_to_swagger, DuplicateMethodAndPathError, \
-    ProtobufCompilationFailedError, InvalidPathArgumentError
-from tests.utests.chameleon.protoc_plugins.test_utils import unindent, \
-    json_rt, generate_plugin_request, load_file
-
-
-class SwaggerTemplateTests(TestCase):
-
-    maxDiff = 10000
-
-    def gen_swagger(self, proto):
-        request = generate_plugin_request(proto)
-        parser = DescriptorParser()
-        native_data = parser.parse_file_descriptors(request.proto_file,
-                                                    type_tag_name='_type',
-                                                    fold_comments=True)
-        swagger = native_descriptors_to_swagger(native_data)
-        return swagger
-
-    def test_swagger_url(self):
-
-        grpc = {
-            '_channel': {
-                '_Rendezvous': {}
-            }
-        }
-        from chameleon.web_server.web_server import WebServer
-        server = yield WebServer(9101, '/', '/swagger', grpc)
-        server.app = 'app'
-
-        server.add_swagger_routes = Mock()
-
-        self.assertEqual(server.add_swagger_routes.call_count, 1)
-        server.add_swagger_routes.assert_called_once_with('app', '/swagger')
-
-    def test_empty_def(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-        """)
-
-        expected_swagger = {
-            u'swagger': u'2.0',
-            u'info': {
-                u'title': u'test.proto',
-                u'version': u'version not set'
-            },
-            u'schemes': [u"http", u"https"],
-            u'consumes': [u"application/json"],
-            u'produces': [u"application/json"],
-            u'paths': {},
-            u'definitions': {}
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger), expected_swagger)
-
-    def test_empty_message_with_service(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {}
-            service TestService {
-              rpc Get(Null) returns(Null) {
-                option (google.api.http) = {
-                  get: "/test"
-                };
-              }
-            }
-        """)
-
-        expected_swagger = {
-            u'swagger': u'2.0',
-            u'info': {
-                u'title': u'test.proto',
-                u'version': u"version not set"
-            },
-            u'schemes': [u"http", u"https"],
-            u'consumes': [u"application/json"],
-            u'produces': [u"application/json"],
-            u'paths': {
-                u'/test': {
-                    u'get': {
-                        u'operationId': u'Get',
-                        u'responses': {
-                            u'200': {
-                                u'description': u'',
-                                u'schema': {
-                                    u'$ref': u'#/definitions/test.Null'
-                                }
-                            }
-                        },
-                        u'tags': [u'TestService']
-                    }
-                }
-            },
-            u'definitions': {
-                u'test.Null': {
-                    u'type': u'object'
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger), expected_swagger)
-
-    def test_simple_annotated_message_with_simple_annotated_service(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-
-            // Simple Message
-            message Simple {
-                string str = 1; // a string attribute
-                int32 int = 2; // an int32 attribute
-            }
-
-            // Service to get things done
-            service TestService {
-
-              /* Get simple answer
-               *
-               * Returns the true answer to all of life's persistent questions.
-               */
-              rpc Get(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  get: "/test"
-                };
-              }
-            }
-        """)
-
-        expected_swagger = {
-            u'swagger': u'2.0',
-            u'info': {
-                u'title': u'test.proto',
-                u'version': u"version not set"
-            },
-            u'schemes': [u"http", u"https"],
-            u'consumes': [u"application/json"],
-            u'produces': [u"application/json"],
-            u'paths': {
-                u'/test': {
-                    u'get': {
-                        u'summary': u'Get simple answer',
-                        u'description':
-                            u' Returns the true answer to all of life\'s '
-                            u'persistent questions.',
-                        u'operationId': u'Get',
-                        u'responses': {
-                            u'200': {
-                                u'description': u'',
-                                u'schema': {
-                                    u'$ref': u'#/definitions/test.Simple'
-                                }
-                            }
-                        },
-                        u'tags': [u'TestService']
-                    }
-                }
-            },
-            u'definitions': {
-                u'test.Simple': {
-                    u'description': u'Simple Message',
-                    u'type': u'object',
-                    u'properties': {
-                        u'int': {
-                            u'description': u'an int32 attribute',
-                            u'type': u'integer',
-                            u'format': u'int32'
-                        },
-                        u'str': {
-                            u'description': u'a string attribute',
-                            u'type': u'string',
-                            u'format': u'string'
-                        }
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger), expected_swagger)
-
-    def test_method_input_params_in_body(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-
-            // Simple Message
-            message Simple {
-                string str = 1; // a string attribute
-                int32 int = 2; // an int32 attribute
-            }
-
-            // Service to get things done
-            service TestService {
-
-              /* Get simple answer
-               *
-               * Returns the true answer to all of life's persistent questions.
-               */
-              rpc Get(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  get: "/test"
-                };
-              }
-
-              /*
-               * Make up an answer (notice the leading blank line)
-               *
-               * Define the ultimate answer
-               */
-              rpc MakeUp(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  post: "/test"
-                  body: "*"
-                };
-              }
-            }
-        """)
-
-        expected_swagger = {
-            u'swagger': u'2.0',
-            u'info': {
-                u'title': u'test.proto',
-                u'version': u"version not set"
-            },
-            u'schemes': [u"http", u"https"],
-            u'consumes': [u"application/json"],
-            u'produces': [u"application/json"],
-            u'paths': {
-                u'/test': {
-                    u'get': {
-                        u'summary': u'Get simple answer',
-                        u'description':
-                            u' Returns the true answer to all of life\'s '
-                            u'persistent questions.',
-                        u'operationId': u'Get',
-                        u'responses': {
-                            u'200': {
-                                u'description': u'',
-                                u'schema': {
-                                    u'$ref': u'#/definitions/test.Simple'
-                                }
-                            }
-                        },
-                        u'tags': [u'TestService']
-                    },
-                    u'post': {
-                        u'summary': u'Make up an answer (notice the leading '
-                                    u'blank line)',
-                        u'description': u' Define the ultimate answer',
-                        u'operationId': u'MakeUp',
-                        u'parameters': [{
-                            u'name': u'body',
-                            u'in': u'body',
-                            u'required': True,
-                            u'schema': {u'$ref': u'#/definitions/test.Simple'}
-                        }],
-                        u'responses': {
-                            u'200': {
-                                u'description': u'',
-                                u'schema': {
-                                    u'$ref': u'#/definitions/test.Simple'
-                                }
-                            }
-                        },
-                        u'tags': [u'TestService']
-                    }
-                }
-            },
-            u'definitions': {
-                u'test.Simple': {
-                    u'description': u'Simple Message',
-                    u'type': u'object',
-                    u'properties': {
-                        u'int': {
-                            u'description': u'an int32 attribute',
-                            u'type': u'integer',
-                            u'format': u'int32'
-                        },
-                        u'str': {
-                            u'description': u'a string attribute',
-                            u'type': u'string',
-                            u'format': u'string'
-                        }
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger), expected_swagger)
-
-    def test_catch_repeating_verbs_for_same_path(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {}
-            service TestService {
-              rpc Get(Null) returns(Null) {
-                option (google.api.http) = {
-                  get: "/test"
-                };
-              }
-              rpc MakeUp(Null) returns(Null) {
-                option (google.api.http) = {
-                  get: "/test"
-                  body: "*"
-                };
-              }
-            }
-        """)
-
-        with self.assertRaises(DuplicateMethodAndPathError):
-            self.gen_swagger(proto)
-
-    def test_catch_unresolved_message_type_reference(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {}
-            service TestService {
-              rpc Get(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  get: "/test"
-                };
-              }
-              rpc MakeUp(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  get: "/test"
-                  body: "*"
-                };
-              }
-            }
-        """)
-
-        with self.assertRaises(ProtobufCompilationFailedError):
-            self.gen_swagger(proto)
-
-    def test_path_parameter_handling(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Simple {
-                string str = 1;
-                int32 int = 2;
-            }
-            service TestService {
-              rpc Get(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  get: "/test/{str}/{int}"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_path = {
-            u'/test/{str}/{int}': {
-                u'get': {
-                    u'operationId': u'Get',
-                    u'parameters': [{
-                        u'name': u'str',
-                        u'in': u'path',
-                        u'type': u'string',
-                        u'format': u'string',
-                        u'required': True
-                    }, {
-                        u'name': u'int',
-                        u'in': u'path',
-                        u'type': u'integer',
-                        u'format': u'int32',
-                        u'required': True
-                    }],
-                    u'responses': {
-                        u'200': {
-                            u'description': u'',
-                            u'schema': {
-                                u'$ref': u'#/definitions/test.Simple'
-                            }
-                        }
-                    },
-                    u'tags': [u'TestService']
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['paths']), expected_swagger_path)
-
-    def test_path_parameter_error_handling(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Simple {
-                string str = 1;
-                int32 int = 2;
-            }
-            service TestService {
-              rpc Get(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  get: "/test/{str}/{xxxxx}/{int}"
-                };
-              }
-            }
-        """)
-
-        with self.assertRaises(InvalidPathArgumentError):
-            self.gen_swagger(proto)
-
-    def test_alternative_bindings(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Simple {
-                string str = 1;
-                int32 int = 2;
-            }
-            service TestService {
-              rpc Get(Simple) returns(Simple) {
-                option (google.api.http) = {
-                  get: "/v1/test/{str}/{int}"
-                  additional_bindings {
-                    post: "/v2/test"
-                    body: "*"
-                  }
-                  additional_bindings {
-                    get: "/v2/test/{int}/{str}"
-                  }
-                };
-              }
-            }
-        """)
-
-        expected_swagger_path = {
-            u'/v1/test/{str}/{int}': {
-                u'get': {
-                    u'operationId': u'Get',
-                    u'parameters': [{
-                        u'name': u'str',
-                        u'in': u'path',
-                        u'type': u'string',
-                        u'format': u'string',
-                        u'required': True
-                    }, {
-                        u'name': u'int',
-                        u'in': u'path',
-                        u'type': u'integer',
-                        u'format': u'int32',
-                        u'required': True
-                    }],
-                    u'responses': {
-                        u'200': {
-                            u'description': u'',
-                            u'schema': {
-                                u'$ref': u'#/definitions/test.Simple'
-                            }
-                        }
-                    },
-                    u'tags': [u'TestService']
-                }
-            },
-            u'/v2/test': {
-                u'post': {
-                    u'operationId': u'Get',
-                    u'parameters': [{
-                        u'in': u'body',
-                        u'name': u'body',
-                        u'required': True,
-                        u'schema': {u'$ref': u'#/definitions/test.Simple'}
-                    }],
-                    u'responses': {
-                        u'200': {
-                            u'description': u'',
-                            u'schema': {u'$ref': u'#/definitions/test.Simple'}
-                        }
-                    },
-                    u'tags': [u'TestService']
-                }
-            },
-            u'/v2/test/{int}/{str}': {
-                u'get': {
-                    u'operationId': u'Get',
-                    u'parameters': [{
-                        u'format': u'int32',
-                        u'in': u'path',
-                        u'name': u'int',
-                        u'required': True,
-                        u'type': u'integer'
-                    }, {
-                        u'format': u'string',
-                        u'in': u'path',
-                        u'name': u'str',
-                        u'required': True,
-                        u'type': u'string'
-                    }],
-                    u'responses': {
-                        u'200': {
-                            u'description': u'',
-                            u'schema': {u'$ref': u'#/definitions/test.Simple'}
-                        }
-                    },
-                    u'tags': [u'TestService']
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['paths']), expected_swagger_path)
-
-    def test_google_null(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            import "google/protobuf/empty.proto";
-            service TestService {
-              rpc Get(google.protobuf.Empty) returns(google.protobuf.Empty) {
-                option (google.api.http) = {
-                  get: "/echo"
-                };
-              }
-            }
-        """)
-
-        expected_swagger = {
-            u'swagger': u'2.0',
-            u'info': {
-                u'title': u'test.proto',
-                u'version': u"version not set"
-            },
-            u'schemes': [u"http", u"https"],
-            u'consumes': [u"application/json"],
-            u'produces': [u"application/json"],
-            u'paths': {
-                u'/echo': {
-                    u'get': {
-                        u'operationId': u'Get',
-                        u'responses': {
-                            u'200': {
-                                u'description': u'',
-                                u'schema': {
-                                    u'$ref':
-                                        u'#/definitions/google.protobuf.Empty'
-                                }
-                            }
-                        },
-                        u'tags': [u'TestService']
-                    }
-                }
-            },
-            u'definitions': {
-                u'google.protobuf.Empty': {
-                    u'description': u'A generic empty message that you can '
-                                    u're-use to avoid defining duplicated\n '
-                                    u'empty messages in your APIs. A typical '
-                                    u'example is to use it as the request\n '
-                                    u'or the response type of an API method. '
-                                    u'For instance:\n\n     service Foo {\n  '
-                                    u'     rpc Bar(google.protobuf.Empty) '
-                                    u'returns (google.protobuf.Empty);\n     '
-                                    u'}\n\n The JSON representation for '
-                                    u'`Empty` is empty JSON object `{}`.',
-                    u'type': u'object'
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger), expected_swagger)
-
-
-    def test_nested_type_definitions(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            import "google/protobuf/empty.proto";
-            message Null {}
-            message Outer {
-              message Inner {
-                message Innermost {
-                  bool healthy = 1;
-                  string illness = 2;
-                }
-                Innermost innermost = 1;
-                string other = 2;
-              }
-              string name = 1;
-              Inner inner = 2;
-            }
-            service TestService {
-              rpc Get(Null) returns(Outer) {
-                option (google.api.http) = {
-                  get: "/test"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.Outer': {
-                u'type': u'object',
-                u'properties': {
-                    u'inner': {
-                        u'$ref': u'#/definitions/test.Outer.Inner'
-                    },
-                    u'name': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    }
-                }
-            },
-            u'test.Outer.Inner': {
-                u'type': u'object',
-                u'properties': {
-                    u'innermost': {
-                        u'$ref': u'#/definitions/test.Outer.Inner.Innermost'
-                    },
-                    u'other': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    }
-                }
-            },
-            u'test.Outer.Inner.Innermost': {
-                u'type': u'object',
-                u'properties': {
-                    u'healthy': {
-                        u'type': u'boolean',
-                        u'format': u'boolean'
-                    },
-                    u'illness': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_enum(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {};
-            // Detailed weather state
-            enum WeatherState {
-              GOOD = 0;  // Weather is good
-              BAD = 1;  // Weather is bad
-            }
-            message Forecast {
-              WeatherState forecast = 1;
-            }
-            service ForecastService {
-              rpc GetForecast(Null) returns(Forecast) {
-                option (google.api.http) = {
-                  get: "/forecast"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.WeatherState': {
-                u'default': u'GOOD',
-                u'description': u'Detailed weather state\n'
-                                u'Valid values:\n'
-                                u' - GOOD: Weather is good\n'
-                                u' - BAD: Weather is bad',
-                u'type': u'string',
-                u'enum': [u'GOOD', u'BAD']
-            },
-            u'test.Forecast': {
-                u'type': u'object',
-                u'properties': {
-                    u'forecast': {u'$ref': u'#/definitions/test.WeatherState'}
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_nested_enum(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {};
-            message Forecast {
-              // Detailed weather state
-              enum WeatherState {
-                GOOD = 0;  // Weather is good
-                BAD = 1;  // Weather is bad
-              }
-              WeatherState forecast = 1;
-            }
-            service ForecastService {
-              rpc GetForecast(Null) returns(Forecast) {
-                option (google.api.http) = {
-                  get: "/forecast"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.Forecast.WeatherState': {
-                u'default': u'GOOD',
-                u'description': u'Detailed weather state\n'
-                                u'Valid values:\n'
-                                u' - GOOD: Weather is good\n'
-                                u' - BAD: Weather is bad',
-                u'type': u'string',
-                u'enum': [u'GOOD', u'BAD']
-            },
-            u'test.Forecast': {
-                u'type': u'object',
-                u'properties': {
-                    u'forecast': {
-                        u'$ref': u'#/definitions/test.Forecast.WeatherState'}
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_array_of_simple_types(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {};
-            message Invitations {
-              string event = 1;
-              repeated string names = 2;
-              repeated int32 ages = 3;
-            }
-            service RsvpService {
-              rpc Get(Null) returns(Invitations) {
-                option (google.api.http) = {
-                  get: "/invitations"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.Invitations': {
-                u'type': u'object',
-                u'properties': {
-                    u'event': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    },
-                    u'names': {
-                        u'type': u'array',
-                        u'items': {
-                            u'type': u'string',
-                            u'format': u'string'
-                        }
-                    },
-                    u'ages': {
-                        u'type': u'array',
-                        u'items': {
-                            u'type': u'integer',
-                            u'format': u'int32'
-                        }
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_array_of_object_type(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {};
-            message Invitations {
-              message Address {
-                string street = 1;
-                string city = 2;
-              }
-              string event = 1;
-              repeated Null nulles = 2;
-              repeated Address addresses = 3;
-            }
-            service RsvpService {
-              rpc Get(Null) returns(Invitations) {
-                option (google.api.http) = {
-                  get: "/invitations"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.Invitations.Address': {
-                u'type': u'object',
-                u'properties': {
-                    u'street': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    },
-                    u'city': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    }
-                }
-            },
-            u'test.Invitations': {
-                u'type': u'object',
-                u'properties': {
-                    u'event': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    },
-                    u'nulles': {
-                        u'type': u'array',
-                        u'items': {
-                            u'$ref': u'#/definitions/test.Null'
-                        }
-                    },
-                    u'addresses': {
-                        u'type': u'array',
-                        u'items': {
-                            u'$ref': u'#/definitions/test.Invitations.Address'
-                        }
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_recursively_nested_values(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {};
-            message TreeNode {
-              string name = 1;
-              repeated TreeNode children = 2;
-            }
-            service RsvpService {
-              rpc Get(Null) returns(TreeNode) {
-                option (google.api.http) = {
-                  get: "/invitations"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.TreeNode': {
-                u'type': u'object',
-                u'properties': {
-                    u'name': {
-                        u'type': u'string',
-                        u'format': u'string'
-                    },
-                    u'children': {
-                        u'type': u'array',
-                        u'items': {
-                            u'$ref': u'#/definitions/test.TreeNode'
-                        }
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_map_fields(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {};
-            message Maps {
-              map<string, string> string_map = 1;
-              map<string, int32> int32_map = 2;
-              map<string, Null> object_map = 3;
-            }
-            service RsvpService {
-              rpc Get(Null) returns(Maps) {
-                option (google.api.http) = {
-                  get: "/maps"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.Maps': {
-                u'type': u'object',
-                u'properties': {
-                    u'string_map': {
-                        u'type': u'object',
-                        u'additionalProperties': {
-                            u'type': u'string',
-                            u'format': u'string'
-                        }
-                    },
-                    u'int32_map': {
-                        u'type': u'object',
-                        u'additionalProperties': {
-                            u'type': u'integer',
-                            u'format': u'int32'
-                        }
-                    },
-                    u'object_map': {
-                        u'type': u'object',
-                        u'additionalProperties': {
-                            u'$ref': u'#/definitions/test.Null',
-                        }
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_array_and_map_of_enum(self):
-
-        proto = unindent("""
-            syntax = "proto3";
-            package test;
-            import "google/api/annotations.proto";
-            message Null {};
-            enum State {
-              GOOD = 0;
-              BAD = 1;
-            }
-            message Map {
-              map<string, State> enum_map = 1;
-              repeated State states = 2;
-            }
-            service RsvpService {
-              rpc Get(Null) returns(Map) {
-                option (google.api.http) = {
-                  get: "/maps"
-                };
-              }
-            }
-        """)
-
-        expected_swagger_definitions = {
-            u'test.Null': {u'type': u'object'},
-            u'test.State': {
-                u'default': u'GOOD',
-                u'description': u'State\n'
-                                u'Valid values:\n'
-                                u' - GOOD\n'
-                                u' - BAD',
-                u'type': u'string',
-                u'enum': [u'GOOD', u'BAD']
-            },
-            u'test.Map': {
-                u'type': u'object',
-                u'properties': {
-                    u'enum_map': {
-                        u'type': u'object',
-                        u'additionalProperties': {
-                            u'$ref': u'#/definitions/test.State',
-                        }
-                    },
-                    u'states': {
-                        u'type': u'array',
-                        u'items': {
-                            u'$ref': u'#/definitions/test.State'
-                        }
-                    }
-                }
-            }
-        }
-
-        swagger = self.gen_swagger(proto)
-        self.assertEqual(json_rt(swagger['definitions']),
-                         expected_swagger_definitions)
-
-    def test_kitchen_sink(self):
-
-        proto = load_file(
-            os.path.dirname(__file__) + '/a_bit_of_everything.proto')
-
-        swagger = self.gen_swagger(proto)
-
-        expected_swagger = json.loads(load_file(
-            os.path.dirname(__file__) + '/a_bit_of_everything.swagger.json')
-        )
-
-        self.maxDiff = 100000
-        self.assertEqual(json_rt(swagger), expected_swagger)
diff --git a/tests/utests/chameleon/protoc_plugins/test_utils.py b/tests/utests/chameleon/protoc_plugins/test_utils.py
deleted file mode 100644
index 6b59f1e..0000000
--- a/tests/utests/chameleon/protoc_plugins/test_utils.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Copyright 2016 the original author or authors.
-#
-# 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.
-#
-import base64
-import json
-import os
-import sys
-from commands import getstatusoutput
-from google.protobuf.compiler.plugin_pb2 import CodeGeneratorRequest
-
-from chameleon.protoc_plugins.swagger_template import \
-    ProtobufCompilationFailedError
-from chameleon.protos import third_party
-
-this_dir = os.path.abspath(os.path.dirname(__file__))
-third_party_dir = os.path.dirname(third_party.__file__)
-
-
-def unindent(str):
-    """eat leading space in front of lines based on the smallest one"""
-    min_leading_spaces = len(str)
-    lines = str.splitlines()
-    for line in lines:
-        if line:
-            min_leading_spaces = min(len(line) - len(line.lstrip(' ')),
-                                     min_leading_spaces)
-    return '\n'.join(l[min_leading_spaces:] for l in lines)
-
-
-def mkdir(path):
-    """equivalent of command line mkdir -p <path>"""
-    if os.path.exists(path):
-        assert os.path.isdir(path)
-        return
-    head, tail = os.path.split(os.path.abspath(path))
-    if not os.path.exists(head):
-        mkdir(path)
-    assert os.path.isdir(head)
-    os.mkdir(path)
-
-
-def save_file(path, content, mode=0644):
-    """save content into file of path"""
-    with file(path, 'w') as f:
-        f.write(content)
-    os.chmod(path, mode)
-
-
-def load_file(path, read_mode='r'):
-    """load content from file of path"""
-    with file(path, read_mode) as f:
-        content = f.read()
-    return content
-
-
-def generate_plugin_request(proto):
-    """save proto file and run protoc to generate a plugin request protobuf"""
-
-    workdir = '/tmp/chameleon_tests'
-
-    mkdir(workdir)
-    save_file(os.path.join(workdir, 'test.proto'), proto)
-    cmd = (
-        'cd {this_dir} && '
-        'env PATH={extended_path} '
-        'python -m grpc.tools.protoc '
-        '-I{workdir} '
-        '-I{third_party_dir} '
-        '-I{this_dir} '
-        '--plugin=protoc-gen-null=null_plugin.py '
-        '--null_out={workdir} '
-        '{workdir}/test.proto'
-            .format(
-            extended_path=os.path.dirname(sys.executable),
-            python=sys.executable,
-            this_dir=this_dir,
-            workdir=workdir,
-            third_party_dir=third_party_dir
-        ))
-
-    code, output = getstatusoutput(cmd)
-    if code != 0:
-        raise ProtobufCompilationFailedError(output)
-
-    content = base64.decodestring(
-        load_file(os.path.join(workdir, 'protoc.request'), 'rb'))
-    request = CodeGeneratorRequest()
-    request.ParseFromString(content)
-
-    return request
-
-
-def json_rt(data):
-    """
-    JSON round-trip is to simply get rid of OrderedDict, to allow cleaner
-    testing.
-    """
-    return json.loads(json.dumps(data))
