source: trunk/test/integration/nl/tno/metagenomics/integration/MockGSCF.groovy @ 7

Last change on this file since 7 was 7, checked in by robert@…, 9 years ago
  • Created tests for the synchronization and trash
  • Improved synchronizationservice and trash
  • Put authorization checks in several pages
File size: 4.5 KB
Line 
1package nl.tno.metagenomics.integration
2
3import com.sun.net.httpserver.*
4import org.apache.commons.io.FileUtils
5
6class MockGSCF {
7        private String response = 'null'
8        private def restResponse = [:]
9        private def restStatus = [:]
10        private HttpServer server =  null
11
12        String contentType = 'text/html'
13        Integer status = 200
14
15        public MockGSCF(Integer port) {
16                server = HttpServer.create(new InetSocketAddress(port),0)
17
18                server.createContext('/', { HttpExchange exchange -> 
19                        println "GSCF other URI: " + exchange.getRequestURI();
20                       
21                        MockGSCF.writeResponseData( exchange, status, response ) 
22                }  as HttpHandler );
23                server.createContext('/rest/getStudies', { HttpExchange exchange -> 
24                        println "GSCF getStudies: " + exchange.getRequestURI();
25                       
26                        def studyToken = MockGSCF.getParameter( exchange, "studyToken" );
27                        if( !studyToken ) {
28                                studyToken = "-"
29                        }
30                       
31                        println "StudyToken: " + studyToken
32                       
33                        MockGSCF.writeResponseData( exchange, getRestStatus( "getStudies", studyToken ), getRestResponse( "getStudies", studyToken ) );
34                       
35                }  as HttpHandler );
36                server.createContext('/rest/getAssays', { HttpExchange exchange -> 
37                        println "GSCF getAssays: " + exchange.getRequestURI();
38                        def studyToken = MockGSCF.getParameter( exchange, "studyToken" );
39                        def assayToken = MockGSCF.getParameter( exchange, "assayToken" );
40                       
41                        def method = "getAssays";
42                        def token = studyToken
43                        if( assayToken ) 
44                                token = token + "-" + assayToken
45                               
46                        MockGSCF.writeResponseData( exchange, getRestStatus( method, token ), getRestResponse( method, token ) );
47                }  as HttpHandler );
48                server.createContext('/rest/getSamples', { HttpExchange exchange -> 
49                        println "GSCF getSamples: " + exchange.getRequestURI();
50                        def assayToken = MockGSCF.getParameter( exchange, "assayToken" );
51                        def sampleToken = MockGSCF.getParameter( exchange, "sampleToken" );
52                       
53                        def method = "getSamples";
54                        def token = assayToken
55                        if( sampleToken )
56                                token = token + "-" + sampleToken
57                               
58                        MockGSCF.writeResponseData( exchange, getRestStatus( method, token ), getRestResponse( method, token ) );
59       
60                }  as HttpHandler );
61                server.createContext('/rest/getAuthorizationLevel', { HttpExchange exchange ->
62                        println "GSCF getAuthorizationlevel: " + exchange.getRequestURI();
63                        def studyToken = MockGSCF.getParameter( exchange, "studyToken" );
64                               
65                        def method = "getAuthorizationLevel";
66                        def token = "-"
67                        if( studyToken )
68                                token = studyToken
69                               
70                        MockGSCF.writeResponseData( exchange, getRestStatus( method, token ), getRestResponse( method, token ) );
71
72                }  as HttpHandler );
73               
74                server.start()
75        }
76
77        public void stop() {
78                if (server)
79                        server.stop(0);
80        }
81
82        public void setResponseByFile(String filename) {
83                response = FileUtils.readFileToString(new File(filename), "UTF-8")
84        }
85
86        public void setRestResponse( String method, def response ) {
87                restResponse[ method ] = response;
88        }
89
90        public void setRestResponse( String method, String token, def response ) {
91                if( !restResponse[ method ] )
92                        restResponse[ method ] = [:]
93
94                restResponse[ method ][ token ] = response;
95        }
96
97        public void setRestStatus( String method, String token, Integer status ) {
98                if( !restStatus[ method ] )
99                        restStatus[ method ] = [:]
100
101                restStatus[ method ][ token ] = status;
102        }
103       
104        public Integer getRestStatus( String method, String token ) {
105                if( restStatus[ method ] && restStatus[ method ][ token ] ) {
106                        def r = restStatus[ method ][ token ];
107                       
108                        if( r instanceof Integer ) {
109                                return r
110                        } else {
111                                try {
112                                        return Integer.parseInt( r.toString() )
113                                } catch( Exception e ) {
114                                        return status;
115                                }
116                        }
117                }
118               
119                return status
120        }
121       
122        public String getRestResponse( String method, String token ) {
123                if( restResponse[ method ] && restResponse[ method ][ token ] ) {
124                        return restResponse[ method ][ token ].toString();
125                }
126               
127                return this.response
128        }
129
130        public static void writeResponseData( HttpExchange exchange, Integer status, String resp ) {
131                println "Returning " + resp
132               
133                exchange.responseHeaders[ "Content-Type" ] = "application/json"
134                exchange.sendResponseHeaders(status, resp.bytes.length);
135                exchange.responseBody.write(resp.bytes)
136                exchange.responseBody.close()
137                exchange.close();
138        }
139       
140        public static String getParameter( HttpExchange exchange, String parameter ) {
141                String query = exchange.getRequestURI().query
142               
143                def parts = query.split( '&' );
144                for( it in parts ) {
145                        def param = it.split( '=' );
146                       
147                        if( param.size() > 0 && param[0].toString().equals( parameter ) ) {
148                                if( param.size() > 1)
149                                        return param[ 1 ]
150                                else 
151                                        return param[ 0 ]
152                        }
153                }
154               
155                return null
156        }
157
158}
Note: See TracBrowser for help on using the repository browser.