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);
 | 
						|
    });
 |