xref: /AOO41X/test/testcommon/source/org/openoffice/test/common/ReportUploader.java (revision 180e3c913db2177de08a20fb5f1cbc04e752640c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 package org.openoffice.test.common;
22 
23 import java.io.File;
24 import java.io.FileInputStream;
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.OutputStream;
28 import java.net.HttpURLConnection;
29 import java.net.URL;
30 import java.util.logging.Level;
31 
32 import org.junit.runner.Description;
33 import org.junit.runner.Result;
34 import org.junit.runner.notification.RunListener;
35 
36 public class ReportUploader extends RunListener {
37 
38     private Logger log = Logger.getLogger(this);
39 
40     private File outputDir = Testspace.getFile("output");
41 
42     private String suiteName = null;
43 
44     private File reportZip = null;
45 
46     private String url = null;
47 
ReportUploader()48     public ReportUploader() {
49         url = System.getProperty("report.to");
50         System.setProperty("report.to", ""); //
51     }
52 
53     @Override
testRunStarted(Description description)54     public void testRunStarted(Description description) throws Exception {
55         suiteName = description.getDisplayName();
56     }
57 
58     @Override
testRunFinished(Result result)59     public void testRunFinished(Result result) throws Exception {
60         if (!FileUtil.isUrl(url))
61             return;
62 
63         // upload
64         File output = new File(outputDir.getAbsolutePath() + "." + suiteName);
65         if (!output.exists())
66             return;
67         try {
68             reportZip = File.createTempFile("aoo_test_report", ".zip");
69             FileUtil.zip(output, reportZip);
70             upload();
71         } finally {
72             if (reportZip != null)
73                 reportZip.delete();
74         }
75     }
76 
77 
78 
79     private static final String boundary = "-----AOOAOOAOO1d226f500d0";
80     private static final String prefix = "--";
81     private static final String newLine = "\r\n";
82 
upload()83     private void upload() {
84         InputStream fis = null;
85         OutputStream out = null;
86         try {
87             HttpURLConnection connection = (HttpURLConnection)  new URL(url).openConnection();
88             connection.setDoInput(true);
89             connection.setDoOutput(true);
90             connection.setConnectTimeout(20 * 1000);
91             connection.setRequestMethod("POST");
92             connection.setRequestProperty("Content-type", "multipart/form-data;boundary=" + boundary);
93 
94             out = connection.getOutputStream();
95             fis = new FileInputStream(reportZip);
96 
97             StringBuffer params = new StringBuffer();
98             params.append(prefix + boundary + newLine);
99             params.append("Content-Disposition: form-data; name=\"name\"");
100             params.append(newLine + newLine);
101             params.append("aoo");
102             params.append(newLine);
103 
104             params.append(prefix + boundary + newLine);
105             params.append("Content-Disposition: form-data; name=\"file\"; filename=\"report.zip\"");
106             params.append(newLine);
107             params.append("Content-Type: application/zip");
108             params.append(newLine + newLine);
109 
110             out.write(params.toString().getBytes());
111 
112             byte[] buffer = new byte[1024];
113             int len = 0;
114             while ((len = fis.read(buffer)) != -1) {
115                 out.write(buffer, 0, len);
116             }
117 
118             params.setLength(0);
119             params.append(newLine);
120             params.append(prefix + boundary + prefix + newLine);
121 
122             out.write(params.toString().getBytes());
123             out.flush();
124             out.close();
125 
126             String response = FileUtil.readStreamAsString(connection.getInputStream(), "UTF-8");
127             log.log(Level.INFO, "Upload report: \n" + response);
128         } catch (Exception e) {
129             log.log(Level.SEVERE, "Fail to upload report!", e);
130         } finally {
131             if (fis != null)
132                 try {
133                     fis.close();
134                 } catch (IOException e) {
135                 }
136             if (out != null)
137                 try {
138                     out.close();
139                 } catch (IOException e) {
140                 }
141         }
142     }
143 
144 
145 
146 }
147