THRIFT-2491 unable to import generated ThriftTest service
Client: Go
Patch: Aleksey Pesternikov

This closes #105

commit f2e7186ca8d63f407dba0c56ee51afd6405926ba
 Author: Aleksey Pesternikov <ap@alekseys-mbp.att.net>
 Date: 2014-04-22T12:48:14Z

add _ to generated filename if it ends with _test.go
diff --git a/compiler/cpp/src/generate/t_generator.h b/compiler/cpp/src/generate/t_generator.h
index d5cf835..d131777 100644
--- a/compiler/cpp/src/generate/t_generator.h
+++ b/compiler/cpp/src/generate/t_generator.h
@@ -193,7 +193,7 @@
     in[0] = tolower(in[0]);
     return in;
   }
-  std::string lowercase(std::string in) {
+  static std::string lowercase(std::string in) {
     for (size_t i = 0; i < in.size(); ++i) {
       in[i] = tolower(in[i]);
     }
diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc
index 4893c71..6f273f1 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/generate/t_go_generator.cc
@@ -254,12 +254,11 @@
             return package_flag;
         }
         std::string real_module = program->get_namespace("go");
-
-        if (real_module.empty()) {
-            return program->get_name();
+        if (!real_module.empty()) {
+        	return real_module;
         }
 
-        return real_module;
+        return lowercase(program->get_name());
     }
 
 private:
@@ -1510,7 +1509,15 @@
  */
 void t_go_generator::generate_service(t_service* tservice)
 {
-    string f_service_name = package_dir_ + "/" + underscore(service_name_) + ".go";
+	string test_suffix("_test");
+	string filename = lowercase(service_name_);
+	string f_service_name;
+	if (filename.compare(filename.length() - test_suffix.length(),
+			test_suffix.length(), test_suffix) == 0) {
+		f_service_name = package_dir_ + "/" + filename + "_.go";
+	} else {
+		f_service_name = package_dir_ + "/" + filename + ".go";
+	}
     f_service_.open(f_service_name.c_str());
     f_service_ <<
                go_autogen_comment() <<
diff --git a/lib/go/test/Makefile.am b/lib/go/test/Makefile.am
index 5499fb7..0be6cf7 100644
--- a/lib/go/test/Makefile.am
+++ b/lib/go/test/Makefile.am
@@ -47,11 +47,11 @@
 
 check: gopath
 	GOPATH=`pwd`/gopath $(GO) build \
-				IncludesTest \
-				BinaryKeyTest \
-				ServicesTest \
-				TypedefFieldTest \
-				RefAnnotationFieldsTest
+				includestest \
+				binarykeytest \
+				servicestest \
+				typedeffieldtest \
+				refannotationfieldstest
 	GOPATH=`pwd`/gopath $(GO) test thrift tests
 
 clean-local:
diff --git a/lib/go/test/NamespacedTest.thrift b/lib/go/test/NamespacedTest.thrift
index 1bb2fc4..a910350 100644
--- a/lib/go/test/NamespacedTest.thrift
+++ b/lib/go/test/NamespacedTest.thrift
@@ -19,7 +19,7 @@
 
 include "ThriftTest.thrift"
 
-namespace go lib.go.test.NamespacedTest
+namespace go lib.go.test.namespacedtest
 
 enum Stuff {
   ONE = 1,
diff --git a/lib/go/test/tests/binary_key_test.go b/lib/go/test/tests/binary_key_test.go
index 4cd3eb4..aa96193 100644
--- a/lib/go/test/tests/binary_key_test.go
+++ b/lib/go/test/tests/binary_key_test.go
@@ -20,12 +20,12 @@
 package tests
 
 import (
-	"BinaryKeyTest"
+	"binarykeytest"
 	"testing"
 )
 
 func TestBinaryMapKeyGeneratesString(t *testing.T) {
-	s := BinaryKeyTest.NewTestStruct()
+	s := binarykeytest.NewTestStruct()
 	//This will only compile if BinToString has type of map[string]string
 	s.BinToString = make(map[string]string)
 }
diff --git a/lib/go/test/tests/multiplexed_protocol_test.go b/lib/go/test/tests/multiplexed_protocol_test.go
index 5b8a328..00669ef 100644
--- a/lib/go/test/tests/multiplexed_protocol_test.go
+++ b/lib/go/test/tests/multiplexed_protocol_test.go
@@ -20,7 +20,7 @@
 package tests
 
 import (
-	"MultiplexedProtocolTest"
+	"multiplexedprotocoltest"
 	"net"
 	"testing"
 	"thrift"
@@ -61,37 +61,37 @@
 	}
 	server = thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory)
 
-	firstProcessor := MultiplexedProtocolTest.NewFirstProcessor(&FirstImpl{})
+	firstProcessor := multiplexedprotocoltest.NewFirstProcessor(&FirstImpl{})
 	processor.RegisterProcessor("FirstService", firstProcessor)
 
-	secondProcessor := MultiplexedProtocolTest.NewSecondProcessor(&SecondImpl{})
+	secondProcessor := multiplexedprotocoltest.NewSecondProcessor(&SecondImpl{})
 	processor.RegisterProcessor("SecondService", secondProcessor)
 
 	go server.Serve()
 }
 
-var firstClient *MultiplexedProtocolTest.FirstClient
+var firstClient *multiplexedprotocoltest.FirstClient
 
 func TestInitClient1(t *testing.T) {
 	socket := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	transport := thrift.NewTFramedTransport(socket)
 	var protocol thrift.TProtocol = thrift.NewTBinaryProtocolTransport(transport)
 	protocol = thrift.NewTMultiplexedProtocol(protocol, "FirstService")
-	firstClient = MultiplexedProtocolTest.NewFirstClientProtocol(transport, protocol, protocol)
+	firstClient = multiplexedprotocoltest.NewFirstClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
 	}
 }
 
-var secondClient *MultiplexedProtocolTest.SecondClient
+var secondClient *multiplexedprotocoltest.SecondClient
 
 func TestInitClient2(t *testing.T) {
 	socket := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	transport := thrift.NewTFramedTransport(socket)
 	var protocol thrift.TProtocol = thrift.NewTBinaryProtocolTransport(transport)
 	protocol = thrift.NewTMultiplexedProtocol(protocol, "SecondService")
-	secondClient = MultiplexedProtocolTest.NewSecondClientProtocol(transport, protocol, protocol)
+	secondClient = multiplexedprotocoltest.NewSecondClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
@@ -99,11 +99,11 @@
 }
 
 //create client without service prefix
-func createLegacyClient(t *testing.T) *MultiplexedProtocolTest.SecondClient {
+func createLegacyClient(t *testing.T) *multiplexedprotocoltest.SecondClient {
 	socket := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	transport := thrift.NewTFramedTransport(socket)
 	var protocol thrift.TProtocol = thrift.NewTBinaryProtocolTransport(transport)
-	legacyClient := MultiplexedProtocolTest.NewSecondClientProtocol(transport, protocol, protocol)
+	legacyClient := multiplexedprotocoltest.NewSecondClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
@@ -139,7 +139,7 @@
 		t.Fatal("Expecting error")
 	}
 	//register default processor and call again
-	processor.RegisterDefault(MultiplexedProtocolTest.NewSecondProcessor(&SecondImpl{}))
+	processor.RegisterDefault(multiplexedprotocoltest.NewSecondProcessor(&SecondImpl{}))
 	legacyClient = createLegacyClient(t)
 	ret, err = legacyClient.ReturnTwo()
 	if err != nil {
diff --git a/lib/go/test/tests/one_way_test.go b/lib/go/test/tests/one_way_test.go
index 5ffbbfe..3ff025f 100644
--- a/lib/go/test/tests/one_way_test.go
+++ b/lib/go/test/tests/one_way_test.go
@@ -20,9 +20,9 @@
 package tests
 
 import (
-	"OnewayTest"
 	"fmt"
 	"net"
+	"onewaytest"
 	"testing"
 	"thrift"
 	"time"
@@ -47,7 +47,7 @@
 
 var addr net.Addr
 var server *thrift.TSimpleServer
-var client *OnewayTest.OneWayClient
+var client *onewaytest.OneWayClient
 
 func TestInitOneway(t *testing.T) {
 	var err error
@@ -56,7 +56,7 @@
 	if err != nil {
 		t.Fatal("Unable to create server socket", err)
 	}
-	processor := OnewayTest.NewOneWayProcessor(&impl{})
+	processor := onewaytest.NewOneWayProcessor(&impl{})
 	server = thrift.NewTSimpleServer2(processor, serverTransport)
 
 	go server.Serve()
@@ -65,7 +65,7 @@
 func TestInitOnewayClient(t *testing.T) {
 	transport := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	protocol := thrift.NewTBinaryProtocolTransport(transport)
-	client = OnewayTest.NewOneWayClientProtocol(transport, protocol, protocol)
+	client = onewaytest.NewOneWayClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
diff --git a/lib/go/test/tests/optional_fields_test.go b/lib/go/test/tests/optional_fields_test.go
index 4b0797c..324bf00 100644
--- a/lib/go/test/tests/optional_fields_test.go
+++ b/lib/go/test/tests/optional_fields_test.go
@@ -20,15 +20,15 @@
 package tests
 
 import (
-	"OptionalFieldsTest"
 	"bytes"
 	gomock "code.google.com/p/gomock/gomock"
+	"optionalfieldstest"
 	"testing"
 	"thrift"
 )
 
 func TestIsSetReturnFalseOnCreation(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	if ao.IsSetS() {
 		t.Errorf("Optional field S is set on initialization")
 	}
@@ -71,7 +71,7 @@
 }
 
 func TestDefaultValuesOnCreation(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	if ao.GetS() != "DEFAULT" {
 		t.Errorf("Unexpected default value %#v for field S", ao.GetS())
 	}
@@ -112,7 +112,7 @@
 }
 
 func TestInitialValuesOnCreation(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	if ao.S != "DEFAULT" {
 		t.Errorf("Unexpected initial value %#v for field S", ao.S)
 	}
@@ -152,11 +152,11 @@
 }
 
 func TestIsSetReturnTrueAfterUpdate(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.S = "somevalue"
 	ao.I = 123
 	ao.B = true
-	ao.Aa = OptionalFieldsTest.NewStructA()
+	ao.Aa = optionalfieldstest.NewStructA()
 	if !ao.IsSetS() {
 		t.Errorf("Field S should be set")
 	}
@@ -172,7 +172,7 @@
 }
 
 func TestListNotEmpty(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.L = []int64{1, 2, 3}
 	if !ao.IsSetL() {
 		t.Errorf("Field L should be set")
@@ -189,7 +189,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.Write(proto)
 }
 
@@ -202,7 +202,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.I = 42
 	ao.Write(proto)
 }
@@ -220,7 +220,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.I = 123
 	ao.Write(proto)
 }
@@ -240,7 +240,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.L = []int64{1, 2}
 	ao.Write(proto)
 }
@@ -257,7 +257,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.Bin = []byte("somebytestring")
 	ao.Write(proto)
 }
@@ -274,7 +274,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.Bin = []byte{}
 	ao.Write(proto)
 }
diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index 7ca194e..4a689fe 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -31,7 +31,7 @@
 namespace st ThriftTest
 namespace py ThriftTest
 namespace py.twisted ThriftTest
-namespace go ThriftTest
+namespace go thrifttest
 namespace php ThriftTest
 namespace delphi Thrift.Test
 namespace cocoa ThriftTest