@@ -22,6 +22,7 @@ var assert = require('assert');
2222var ByteBuffer = require ( 'bytebuffer' ) ;
2323var entity = require ( '../../lib/datastore/entity.js' ) ;
2424var extend = require ( 'extend' ) ;
25+ var http = require ( 'http' ) ;
2526var https = require ( 'https' ) ;
2627var mockery = require ( 'mockery' ) ;
2728var mockRespGet = require ( '../testdata/response_get.json' ) ;
@@ -39,6 +40,15 @@ extend(true, https, {
3940 }
4041} ) ;
4142
43+ var httpRequestCached = http . request ;
44+ var httpRequestOverride = util . noop ;
45+
46+ extend ( true , http , {
47+ request : function ( ) {
48+ return httpRequestOverride . apply ( this , util . toArray ( arguments ) ) ;
49+ }
50+ } ) ;
51+
4252// Create a protobuf "FakeMethod" request & response.
4353pb . FakeMethodRequest = function ( ) {
4454 this . toBuffer = function ( ) {
@@ -62,6 +72,7 @@ describe('Request', function() {
6272 before ( function ( ) {
6373 mockery . registerMock ( './pb.js' , pb ) ;
6474 mockery . registerMock ( 'https' , https ) ;
75+ mockery . registerMock ( 'http' , http ) ;
6576 mockery . enable ( {
6677 useCleanCache : true ,
6778 warnOnUnregistered : false
@@ -73,6 +84,7 @@ describe('Request', function() {
7384 mockery . deregisterAll ( ) ;
7485 mockery . disable ( ) ;
7586 httpsRequestOverride = httpsRequestCached ;
87+ httpRequestOverride = httpRequestCached ;
7688 } ) ;
7789
7890 beforeEach ( function ( ) {
@@ -85,6 +97,9 @@ describe('Request', function() {
8597 request . makeAuthorizedRequest_ = function ( req , callback ) {
8698 ( callback . onAuthorized || callback ) ( null , req ) ;
8799 } ;
100+ request . makeAuthorizedRequest_ . getEnvironment = function ( ) {
101+ return { } ;
102+ } ;
88103 } ) ;
89104
90105 describe ( 'get' , function ( ) {
@@ -487,10 +502,13 @@ describe('Request', function() {
487502 assert . equal ( opts . headers [ 'Content-Type' ] , 'application/x-protobuf' ) ;
488503 done ( ) ;
489504 } ;
505+ request . makeAuthorizedRequest_ . getEnvironment = function ( ) {
506+ return { } ;
507+ } ;
490508 request . makeReq_ ( method , { } , util . noop ) ;
491509 } ) ;
492510
493- it ( 'should make https request' , function ( done ) {
511+ it ( 'should make https request if not gae dev and no creds ' , function ( done ) {
494512 var mockRequest = { mock : 'request' } ;
495513 httpsRequestOverride = function ( req ) {
496514 assert . deepEqual ( req , mockRequest ) ;
@@ -500,6 +518,45 @@ describe('Request', function() {
500518 request . makeAuthorizedRequest_ = function ( opts , callback ) {
501519 ( callback . onAuthorized || callback ) ( null , mockRequest ) ;
502520 } ;
521+ request . makeAuthorizedRequest_ . getEnvironment = function ( ) {
522+ return {
523+ GAE_DEV : false ,
524+ NO_CREDENTIALS : false
525+ } ;
526+ } ;
527+ request . makeReq_ ( 'commit' , { } , util . noop ) ;
528+ } ) ;
529+
530+ it ( 'should make http call to API_HOST if no credentials' , function ( done ) {
531+ var mockRequest = { mock : 'request' } ;
532+
533+ var API_HOST_CACHED = process . env . API_HOST ;
534+ var GAE_SERVER_PORT_CACHED = process . env . GAE_SERVER_PORT ;
535+
536+ process . env . API_HOST = 'API_HOST' ;
537+ process . env . GAE_SERVER_PORT = 99 ;
538+
539+ httpRequestOverride = function ( req ) {
540+ assert . deepEqual ( req , mockRequest ) ;
541+ assert . equal ( req . host , process . env . API_HOST ) ;
542+ assert . equal ( req . port , process . env . GAE_SERVER_PORT ) ;
543+
544+ done ( ) ;
545+
546+ process . env . API_HOST = API_HOST_CACHED ;
547+ process . env . GAE_SERVER_PORT = GAE_SERVER_PORT_CACHED ;
548+
549+ return new stream . Writable ( ) ;
550+ } ;
551+ request . makeAuthorizedRequest_ = function ( opts , callback ) {
552+ ( callback . onAuthorized || callback ) ( null , mockRequest ) ;
553+ } ;
554+ request . makeAuthorizedRequest_ . getEnvironment = function ( ) {
555+ return {
556+ GAE_DEV : true ,
557+ NO_CREDENTIALS : true
558+ } ;
559+ } ;
503560 request . makeReq_ ( 'commit' , { } , util . noop ) ;
504561 } ) ;
505562
@@ -521,11 +578,14 @@ describe('Request', function() {
521578 pbFakeMethodResponseDecode = function ( ) {
522579 done ( ) ;
523580 } ;
524- httpsRequestOverride = function ( req , callback ) {
525- var ws = new stream . Writable ( ) ;
526- callback ( ws ) ;
527- ws . emit ( 'end' ) ;
528- return ws ;
581+ httpsRequestOverride = function ( ) {
582+ var requestStream = new stream . PassThrough ( ) ;
583+ var responseStream = new stream . PassThrough ( ) ;
584+ setImmediate ( function ( ) {
585+ requestStream . emit ( 'response' , responseStream ) ;
586+ responseStream . end ( ) ;
587+ } ) ;
588+ return requestStream ;
529589 } ;
530590 request . makeReq_ ( 'fakeMethod' , util . noop ) ;
531591 } ) ;
@@ -535,6 +595,9 @@ describe('Request', function() {
535595 request . createAuthorizedRequest_ = function ( opts , callback ) {
536596 ( callback . onAuthorized || callback ) ( ) ;
537597 } ;
598+ request . makeAuthorizedRequest_ . getEnvironment = function ( ) {
599+ return { } ;
600+ } ;
538601 } ) ;
539602
540603 describe ( 'commit' , function ( ) {
0 commit comments