mirror of https://github.com/grpc/grpc-node.git
				
				
				
			
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
|  * Copyright 2017 gRPC 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.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| const xml2js = require('xml2js');
 | |
| const fs = require('fs');
 | |
| const path = require('path');
 | |
| const util = require('util');
 | |
| const readFile = util.promisify(fs.readFile);
 | |
| const writeFile = util.promisify(fs.writeFile);
 | |
| const readDir = util.promisify(fs.readdir);
 | |
| 
 | |
| const rootDir = __dirname;
 | |
| 
 | |
| // Fake test suite log with a failure if log parsing failed
 | |
| const parseFailureLog = [
 | |
|   {
 | |
|     $: {
 | |
|       name: 'Unknown Test Suite',
 | |
|       tests: '1',
 | |
|       failures: '1',
 | |
|     },
 | |
|     testcase: [
 | |
|       {
 | |
|         $: {
 | |
|           classname: 'Test Log Parsing',
 | |
|           name: 'Test Log Parsing'
 | |
|         },
 | |
|         failure: {
 | |
|           $: {
 | |
|             message: "Log parsing failed"
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     ]
 | |
|   }
 | |
| ];
 | |
| 
 | |
| readDir(rootDir + '/reports')
 | |
|     .then((dirNames) =>
 | |
|           Promise.all(dirNames.map((dirName) =>
 | |
|                                    readDir(path.resolve(rootDir, 'reports', dirName))
 | |
|                                    .then((fileNames) =>
 | |
|                                          Promise.all(fileNames.map((name) =>
 | |
|                                                                    readFile(path.resolve(rootDir, 'reports', dirName, name))
 | |
|                                                                    .then((content) => {
 | |
|                                                                      let parser = new xml2js.Parser();
 | |
|                                                                      const parseString = util.promisify(parser.parseString.bind(parser));
 | |
|                                                                      return parseString(content);
 | |
|                                                                    })
 | |
|                                                                   ))
 | |
|                                         )
 | |
|                                    .then((objects) => {
 | |
|                                      const merged = {
 | |
|                                        testsuites: {
 | |
|                                           testsuite: Array.prototype.concat.apply([], objects.map((obj) => {
 | |
|                                             if (obj) {
 | |
|                                               return obj.testsuites.testsuite;
 | |
|                                             } else {
 | |
|                                               return parseFailureLog;
 | |
|                                             }}))
 | |
|                                        }
 | |
|                                      }
 | |
|                                      let builder = new xml2js.Builder();
 | |
|                                      let xml = builder.buildObject(merged);
 | |
|                                      let resultName = path.resolve(rootDir, 'reports', dirName, 'sponge_log.xml');
 | |
|                                      console.log(`Writing ${resultName}`);
 | |
|                                      return writeFile(resultName, xml);
 | |
|                                    })
 | |
|                                   ))
 | |
|          )
 | |
|     .catch((error) => {
 | |
|       console.error(error);
 | |
|     });
 |