diff --git a/tests/utests/chameleon/protoc_plugins/__init__.py b/tests/utests/chameleon/protoc_plugins/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/__init__.py
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
new file mode 100644
index 0000000..c9b6800
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.native.json
@@ -0,0 +1 @@
+{"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
new file mode 100644
index 0000000..bb375bb
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.proto
@@ -0,0 +1,122 @@
+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
new file mode 100644
index 0000000..35bbca5
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/a_bit_of_everything.swagger.json
@@ -0,0 +1,541 @@
+{
+  "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
new file mode 100644
index 0000000..ada7e54
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/descriptor_parser_test.py
@@ -0,0 +1,270 @@
+#
+# 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
new file mode 100644
index 0000000..e8ac6ba
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/empty.native.json
@@ -0,0 +1 @@
+{"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
new file mode 100644
index 0000000..dee6c59
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/empty.swagger.json
@@ -0,0 +1 @@
+{"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
new file mode 100755
index 0000000..9443304
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/null_plugin.py
@@ -0,0 +1,33 @@
+#!/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
new file mode 100644
index 0000000..460b84d
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/sub.native.json
@@ -0,0 +1 @@
+{"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
new file mode 100644
index 0000000..d3f2462
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/sub.proto
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 0000000..5a2f659
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/sub.swagger.json
@@ -0,0 +1 @@
+{"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
new file mode 100644
index 0000000..9ddf68f
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/sub2.native.json
@@ -0,0 +1 @@
+{"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
new file mode 100644
index 0000000..7b98db0
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/sub2.proto
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 0000000..575e709
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/sub2.swagger.json
@@ -0,0 +1 @@
+{"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
new file mode 100644
index 0000000..1344430
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/swagger_template_test.py
@@ -0,0 +1,1052 @@
+#
+# 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 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_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
new file mode 100644
index 0000000..6b59f1e
--- /dev/null
+++ b/tests/utests/chameleon/protoc_plugins/test_utils.py
@@ -0,0 +1,110 @@
+#
+# 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))
