# ============LICENSE_START========================================== # org.onap.vvp/test-engine # =================================================================== # Copyright © 2017 AT&T Intellectual Property. All rights reserved. # =================================================================== # # Unless otherwise specified, all software contained herein is licensed # under the Apache License, Version 2.0 (the “License”); # you may not use this software 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. # # # # Unless otherwise specified, all documentation contained herein is licensed # under the Creative Commons License, Attribution 4.0 Intl. (the “License”); # you may not use this documentation except in compliance with the License. # You may obtain a copy of the License at # # https://creativecommons.org/licenses/by/4.0/ # # Unless required by applicable law or agreed to in writing, documentation # 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. # # ============LICENSE_END============================================ # # ECOMP is a trademark and service mark of AT&T Intellectual Property. from django.conf import settings from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from rest_framework.parsers import JSONParser from rest_framework.renderers import JSONRenderer from iceci import mail from iceci.mail import testsResults_mail_body from services.constants import ServiceProvider from services.logging_service import LoggingServiceFactory from .models import TestResults from .serializers import TestResultsModelSerializer LAST_BUILD_REPORT_NUM = None # from django.core.mail import send_mail # from . import mail logger = LoggingServiceFactory.get_logger() def index(request): return HttpResponse("Hello, world. You're at the " + ServiceProvider.PROGRAM_NAME + " ci index.") @csrf_exempt def testResult_list(request): # List all tests, or create a new test. if (request.method == 'DELETE' or request.method == 'PUT'): return HttpResponse(status=405) if request.method == 'GET': testResult = TestResults.objects.all() serializer = TestResultsModelSerializer(testResult, many=True) return JSONResponse(serializer.data) elif request.method == 'POST': data = JSONParser().parse(request) serializer = TestResultsModelSerializer(data=data) if serializer.is_valid(): serializer.save() return JSONResponse(serializer.data, status=201) return JSONResponse(serializer.errors, status=400) @csrf_exempt def testResultStr(request, param): # List all tests, or create a new test. try: testResults = TestResults.objects.filter(build_id=param) pass_counter, total_counter, statisticData, fail_counter = \ strReportForTestResults(testResults) evaultaion = as_percentage_of(pass_counter, total_counter) except Exception as e: msg = "Something went wrong while trying to send Test Results " + \ str(e) return HttpResponse(msg, status=500) msg = "Total Tests: " + str(total_counter) + " Pass Tests: " + \ str(pass_counter) + " Fail Tests: " + str(fail_counter) +\ " Statistics : " + str(evaultaion) + \ " BUILD_REPORT_NUM : " + str(param) return HttpResponse(msg, status=200) @csrf_exempt def testResult_detail(request, param): # Retrieve, update or delete a test. if request.method == 'POST': return HttpResponse(status=405) param = param.strip("/") try: testResult = TestResults.objects.get(name=param) except TestResults.DoesNotExist: return HttpResponse(status=404) if request.method == 'GET': serializer = TestResultsModelSerializer(testResult) return JSONResponse(serializer.data) elif request.method == 'PUT': data = JSONParser().parse(request) serializer = TestResultsModelSerializer(testResult, data=data) if serializer.is_valid(): serializer.save() return JSONResponse(serializer.data) return JSONResponse(serializer.errors, status=400) elif request.method == 'DELETE': testResult.delete() return HttpResponse(status=204) # ========================================================================= # def testResult_post_action(request, data): # # logger.debug("about to send mail to " + data['email']) # # html_msg = mail.mail_body.substitute(data) # #send mail with template # send_mail(mail.mail_subject, # '', # mail.mail_from, # mail.mail_to, # fail_silently=False, # html_message=html_msg) # ========================================================================= def createHtmlStrReportForTestResults(testResults): total_counter = 0 fail_counter = 0 pass_counter = 0 statisticData = "" str2 = "" + "@Total" + \ "@Pass" + \ "@Fail" + \ "@Evaultaion" + "" paramData = "" str3 = "" + \ "@Version" + "" allData = "" string_temp = "" + \ "@TestType" +\ "@TestFeature" + \ "@TestName" + \ "@TestResult" + \ "@Notes" + \ "@Creation_time" + "" # testResults for res in testResults: allData += string_temp.replace( "@TestType", string_temp( res.testType)).replace( "@TestFeature", string_temp( res.testFeature)).replace( "@TestName", string_temp( res.testName)).replace( "@TestResult", string_temp( res.testResult)).replace( "@Notes", string_temp( res.notes)).replace( "@Creation_time", string_temp( res.create_time)) total_counter += 1 if (res.testResult == "PASS"): pass_counter += 1 else: fail_counter += 1 return pass_counter, total_counter, statisticData, str2, \ fail_counter, paramData, str3, allData def strReportForTestResults(testResults): total_counter = 0 fail_counter = 0 pass_counter = 0 statisticData = "" for res in testResults: # testResults total_counter += 1 if (res.testResult == "PASS"): pass_counter += 1 else: fail_counter += 1 return pass_counter, total_counter, statisticData, fail_counter @csrf_exempt # List all tests, or create a new test. def testResult_list_to_mail(request, param): if (request.method == 'DELETE' or request.method == 'PUT' or request.method == 'POST'): return HttpResponse(status=405) data = dict() print("BUILD_REPORT_NUM = " + settings.ICE_BUILD_REPORT_NUM) testResults = TestResults.objects.filter(build_id=param) pass_counter, total_counter, statisticData, str2, fail_counter, \ paramData, str3, allData = createHtmlStrReportForTestResults( testResults) evaultaion = as_percentage_of(pass_counter, total_counter) statisticData += str2.replace( "@Total", str(total_counter)).replace( "@Pass", str(pass_counter)).replace( "@Fail", str(fail_counter)).replace( "@Evaultaion", str(evaultaion)) paramData += str3.replace("@Version", str(param)) data['email'] = "rgafiulin@interwise.com" data['allData'] = str(allData) data['statisticData'] = str(statisticData) data['paramData'] = str(paramData) mail.testsResults_mail_to = data['email'] try: mail.sendMail( param, data['email'], data, mail.testsResults_mail_body, mail.testsResults_mail_subject) except Exception as e: msg = "Something went wrong while " +\ "trying to send Test Report mail to " + \ data['email'] + str(e) return HttpResponse(msg, status=500) serializer = TestResultsModelSerializer(testResults, many=True) return JSONResponse(serializer.data) @csrf_exempt def testResult_list_to_html_file(request, param): if (request.method == 'DELETE' or request.method == 'PUT' or request.method == 'POST'): return HttpResponse(status=405) data = dict() print("BUILD_REPORT_NUM = " + settings.ICE_BUILD_REPORT_NUM) testResults = TestResults.objects.filter( build_id=settings.ICE_BUILD_REPORT_NUM) pass_counter, total_counter, statisticData, str2, fail_counter, \ paramData, str3, allData = \ createHtmlStrReportForTestResults(testResults) evaultaion = as_percentage_of(pass_counter, total_counter) statisticData += str2.replace( "@Total", str(total_counter)).replace( "@Pass", str(pass_counter)).replace( "@Fail", str(fail_counter)).replace( "@Evaultaion", str(evaultaion)) paramData += str3.replace("@Version", str(param)) data['allData'] = str(allData) data['statisticData'] = str(statisticData) data['paramData'] = str(paramData) html_msg = testsResults_mail_body.substitute(data) fileName = settings.LOGS_PATH + "Test_Results_" + \ settings.ICE_BUILD_REPORT_NUM + ".html" try: with open(fileName, "w") as text_file: text_file.write(html_msg) except Exception as e: msg = "Something went wrong while trying to " +\ "write the tet results to html file " + \ fileName + " " + str(e) return HttpResponse(msg, status=500) serializer = TestResultsModelSerializer(testResults, many=True) return JSONResponse(serializer.data) def as_percentage_of(part, whole): try: return "%d%%" % (float(part) / whole * 100) except (ValueError, ZeroDivisionError): return "" # An HttpResponse that renders its content into JSON. class JSONResponse(HttpResponse): def __init__(self, data, **kwargs): content = JSONRenderer().render(data) kwargs['content_type'] = 'application/json' super(JSONResponse, self).__init__(content, **kwargs)