import sys;
version = str(sys.version[0])
print('Python Version: ' + version)
if version == '2':
print('This script requires python3')
sys.exit(0)
#Only run this once
import os;os.chdir('../')
Python Version: 3
def getVersion(env):
java_var = {}
with open(os.path.join(os.environ[env],'release'), 'r') as foil:
for line in [x for x in foil if '=' in x]:
name, value = line.split('=',1)
java_var[name.strip().replace('"','')] = value.strip().replace('"','')
return java_var
def getMajorVersion(env):
return int(getVersion(env)['JAVA_VERSION'].split('.')[1])
print('JAVA_HOME: ' + str(getVersion('JAVA_HOME')['JAVA_VERSION']))
print('JAVA7_HOME: ' + str(getVersion('JAVA7_HOME')['JAVA_VERSION']))
if getMajorVersion('JAVA_HOME') != 8:
print('Cryptoguard requires Java 8 JDK')
sys.exit(0)
if getMajorVersion('JAVA7_HOME') != 7:
print('Cryptoguard requires access to Java 7 JDK')
sys.exit(0)
JAVA_HOME: 1.8.0_232 JAVA7_HOME: 1.7.0
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patch
import cryptoguard
saveFigs = False
plotNum = 0
def getBaseFig():
global plotNum
plotNum = plotNum + 1
return plt.figure(plotNum)
def getFig():
return getBaseFig().add_subplot(111)
liveTests, skippedTests, grouping = cryptoguard.TestUtils.getHelpTests()
groupLive = sum([grouping[x]['Active'] for x in grouping.keys()])
groupSkip = sum([grouping[x]['Skipped'] for x in grouping.keys()])
grouping['Other'] = {
'Active':liveTests - groupLive,
'Skipped':skippedTests - groupSkip
}
activeTests = [int(grouping[x]['Active']) for x in grouping.keys()]
def func(pct, allvals):
absolute = int(pct/100.*np.sum(allvals))
return "{:.1f}%: ({:d} Tests)".format(pct, absolute)
axss = getFig()
wedges, texts, autotexts = axss.pie(activeTests,
labels=grouping.keys(),
autopct=lambda pct: func(pct, activeTests),
shadow=True,
startangle=0)
totalTests = [int(grouping[x]['Active']) + int(grouping[x]['Skipped']) for x in grouping.keys()]
def func(pct, allvals):
absolute = int(pct/100.*np.sum(allvals))
return "{:.1f}%: ({:d} Tests)".format(pct, absolute)
axss = getFig()
wedges, texts, autotexts = axss.pie(totalTests,
labels=grouping.keys(),
autopct=lambda pct: func(pct, totalTests),
shadow=True,
startangle=0)
cryptoguard.TestUtils.test(passedtests='EntryPointTest_APK.main_TestableApk_Default')
Running the test: EntryPointTest_APK.main_TestableApk_Default ========================= Passed
#Running the tests
streamTests = False
testResults = cryptoguard.TestUtils.tests()
Running all of the available tests. ========================= 01/68 | AnalyzerReportTest.simpleTest_1 | Pass | S:10 02/68 | ArgumentsCheckTest.testEnvironmentVariables | Pass | S:10 03/68 | ArgumentsCheckTest.parameterCheck_verifyingJavaSevenHome | Pass | S:10 04/68 | ArgumentsCheckTest.parameterCheck_verifyingJavaAndroidHome | Pass | S:10 05/68 | ArgumentsCheckTest.parameterCheck_VersionOut | Pass | S:11 06/68 | ArgumentsCheckTest.parameterCheck_HelpOut | Pass | S:10 07/68 | ArgumentsCheckTest.paramaterCheck_jar_enhancedInputFile | Pass | S:10 08/68 | ArgumentsCheckTest.paramaterCheck_jar_SkipValidation | Pass | S:10 09/68 | ArgumentsCheckTest.paramaterCheck_jar | Pass | S:10 10/68 | ArgumentsCheckTest.paramaterCheck_Barejar | Pass | S:10 11/68 | ArgumentsCheckTest.parameterCheck_gdl | Pass | S:11 12/68 | CWEListTest.sampleTestOne | Pass | S:09 13/68 | EntryPointTest_APK.main_TestableApk_Legacy | Pass | S:18 14/68 | EntryPointTest_APK.main_TestableApk_Legacy_Stream | Pass | S:19 15/68 | EntryPointTest_APK.main_TestableApk_Scarf | Pass | S:19 16/68 | EntryPointTest_APK.main_TestableApk_Scarf_SpecifyAndroidHome | Pass | S:19 17/68 | EntryPointTest_APK.main_TestableApk_Scarf_SpecifyHome | Pass | S:19 18/68 | EntryPointTest_APK.main_TestableApk_Scarf_Stream | Pass | S:19 19/68 | EntryPointTest_APK.main_TestableApk_Default | Pass | S:21 20/68 | EntryPointTest_APK.main_TestableApk_Default_Stream | Pass | S:19 21/68 | EntryPointTest_APK.main_TestableApk_Default_Stream_Defensive_0 | Pass | S:11 22/68 | EntryPointTest_CLASS.main_TestableFile_VerySimple | Pass | S:14 23/68 | EntryPointTest_CLASS.main_TestableFiles_SingleTest | Pass | S:16 24/68 | EntryPointTest_CLASS.main_TestableFile_NewTestCaseTwo | Pass | S:13 25/68 | EntryPointTest_CLASS.main_TestableFiles_MultiTest | Pass | S:24 26/68 | EntryPointTest_CLASS.main_TestableFiles_MultiTest_Scarf | Pass | S:24 27/68 | EntryPointTest_CLASS.main_TestableFiles_MultiTest_Scarf_ClassPath | Pass | S:39 28/68 | EntryPointTest_CLASS.main_TestableFiles_MultiTest_Scarf_Stream | Pass | S:24 29/68 | EntryPointTest_CLASS.main_TestableFiles_FullProject | Pass | S:31 30/68 | EntryPointTest_CLASS.main_TestableFiles_SingleTest_PluginBase_ClassFileOnly | Pass | S:16 31/68 | EntryPointTest_CLASS.main_TestableFiles_MultiTest_Plugin | Pass | S:14 32/68 | EntryPointTest_JAR.main_VerySimple_Scarf | Pass | S:12 33/68 | EntryPointTest_JAR.main_TestableJar | Pass | S:32 34/68 | EntryPointTest_JAR.main_TestableJar_Scarf | Pass | S:33 35/68 | EntryPointTest_JAR.main_TestableJar_Scarf_Heuristics | Pass | S:33 36/68 | EntryPointTest_JAR.main_TestableJar_Default | Pass | S:33 37/68 | EntryPointTest_JAR.main_TestableJar_Default_SpecifyJavaHome | Pass | S:32 38/68 | EntryPointTest_JAR.main_TestableJar_Default_Heuristics | Pass | S:33 39/68 | EntryPointTest_JAR.main_TestableJar_Scarf_Args | Pass | S:32 40/68 | EntryPointTest_JAR.main_TestableJar_Scarf_Stream | Pass | S:34 41/68 | EntryPointTest_JAR.main_TestableJar_Default_Stream | Pass | S:33 42/68 | EntryPointTest_JAR.main_TestableJar_ScarfTimeStamp | Pass | S:32 43/68 | EntryPointTest_JAR.main_TestableJar_ScarfTimeStamp_UsingClassPaths | Pass | S:33 44/68 | EntryPointTest_JAR.main_TestableJar_Default_WithHeuristics | Pass | S:32 45/68 | EntryPointTest_JAR.main_TestableJar_Default_WithClassPath | Pass | S:32 46/68 | EntryPointTest_JAVA.main_TestableFile_VerySimple | Pass | S:19 47/68 | EntryPointTest_JAVA.main_Crypto_Example_File | Pass | S:20 48/68 | EntryPointTest_JAVA.main_PasswordUtils_Example_File | Pass | S:20 49/68 | EntryPointTest_JAVA.main_SymCrypto_Example_File | Pass | S:18 50/68 | EntryPointTest_JAVA.main_SymCrypto_Example_Package_File | Pass | S:16 51/68 | EntryPointTest_JAVA.main_SymCrypto_Multiple_File | Pass | S:18 52/68 | EntryPointTest_JAVA.main_SymCrypto_Example_File_Failure_Test | Pass | S:17 53/68 | EntryPointTest_SOURCE.main_VerySimpleGradleProject | Pass | S:14 54/68 | EntryPointTest_SOURCE.main_TestableJarSource | Pass | S:18 55/68 | EntryPointTest_SOURCE.main_TestableJarSourceScarf | Pass | S:19 56/68 | EntryPointTest_SOURCE.main_TestableJarSourceScarf_SpecifyHome | Pass | S:19 57/68 | EntryPointTest_SOURCE.main_TestableJarSourceScarf_Stream | Pass | S:19 58/68 | RuleListTest.testGetRulesByNumber | Pass | S:09 59/68 | RuleListTest.testCWEListing | Pass | S:10 60/68 | ScarfXMLTest.simpleTest_1 | Pass | S:10 61/68 | ScarfXMLTest.testAllArguments_inputValidation | Pass | S:11 62/68 | UtilsTest.trimFilePathTestOne | Pass | S:11 63/68 | UtilsTest.trimFilePathTestTwo | Pass | S:10 64/68 | UtilsTest.testVerifyClassPathsOne | Pass | S:10 65/68 | UtilsTest.testVerifyClassPathsTwo | Pass | S:11 66/68 | UtilsTest.test_retrieveFullyQualifiedPath_Single | Pass | S:12 67/68 | UtilsTest.test_retrievePackageFromJavaFiles | Pass | S:12 68/68 | UtilsTest.test_retrieveFullyQualifiedName |
replica = {
'APK': {},
'JAR': {},
'JAVA': {},
'SOURCE': {},
'CLASS': {},
'OTHER':{}
}
#results = {
#'APK': {
#'Pass':[
#{
#'name': name,
#'timeTaken':time,
#'timesReRun':timeReRun
#},
#],
#'Fail':[
#{
#'name': name,
#'timeTaken':time,
#'timesReRun':timeReRun
#},
#],
#'Skip':[
#{
#'name': name,
#'timeTaken':time,
#'timesReRun':timeReRun
#},
#]
#}
#},
for key, value in testResults.items():
passArr = [int(x['timeTaken']) for x in value['Pass']]
replica[key]['PassCount'] = len(passArr)
replica[key]['PassTime'] = sum(passArr)
failArr = [int(x['timeTaken']) for x in value['Fail']]
replica[key]['FailCount'] = len(failArr)
replica[key]['FailTime'] = sum(failArr)
replica[key]['Skipped'] = len([x for x in value['Skip']])
totalTime = [int(replica[x]['PassTime'] + replica[x]['FailTime']) for x in replica.keys()]
def func(pct, allvals):
absolute = int(pct/100.*np.sum(allvals))
return "{:d} s".format(absolute)
axss = getFig()
wedges, texts, autotexts = axss.pie(totalTime,
labels=replica.keys(),
autopct=lambda pct: func(pct, totalTime),
shadow=True,
startangle=0)
totalCounts = [int(replica[x]['PassCount'] + replica[x]['FailCount']) for x in replica.keys()]
def func(pct, allvals):
absolute = int(pct/100.*np.sum(allvals))
return "{:d} tests".format(absolute)
axss = getFig()
wedges, texts, autotexts = axss.pie(totalCounts,
labels=replica.keys(),
autopct=lambda pct: func(pct, totalCounts),
shadow=True,
startangle=0)
groups = np.arange(len(replica.keys()))
groupwidth = .2
trend = 50
rangeLine = range(0, 100)
Passed = [float(replica[x]['PassTime']) for x in replica.keys()]
#ant.reverse()
Failed = [float(replica[x]['FailTime']) for x in replica.keys()]
#sbt.reverse()
ax = getFig()
plt.bar(groups + (groupwidth*0), Failed, color='red', width=groupwidth, label='Failed')
plt.bar(groups + (groupwidth*1), Passed, color='green', width=groupwidth, label='Passed')
plt.legend(loc='best')
ax.set_title("Time taken for test type")
ax.set_xticks([x + groupwidth*1.5 for x in np.arange(6)])
ax.set_xticklabels(replica.keys())
ax.set_xlabel('Test Type')
ax.set_ylabel('Time Taken (s)')
plt.show()
if saveFigs:
plt.savefig('Resources/Imgs/BuildToolTrend.png')
groups = np.arange(len(replica.keys()))
groupwidth = .2
trend = 50
rangeLine = range(0, 100)
Passed = [int(replica[x]['PassCount']) for x in replica.keys()]
#ant.reverse()
Skipped = [int(replica[x]['Skipped']) for x in replica.keys()]
#sbt.reverse()
Failed = [int(replica[x]['FailCount']) for x in replica.keys()]
#sbt.reverse()
ax = getFig()
plt.bar(groups + (groupwidth*0), Failed, color='red', width=groupwidth, label='Failed')
plt.bar(groups + (groupwidth*1), Skipped, color='yellow', width=groupwidth, label='Skipped')
plt.bar(groups + (groupwidth*2), Passed, color='green', width=groupwidth, label='Passed')
plt.legend(loc='best')
ax.set_title("Test Count for test type")
ax.set_xticks([x + groupwidth*1.5 for x in np.arange(6)])
ax.set_xticklabels(replica.keys())
ax.set_xlabel('Test Type')
ax.set_ylabel('Test counts')
plt.show()
if saveFigs:
plt.savefig('Resources/Imgs/BuildToolTrend.png')
groups = np.arange(len(replica.keys()))
groupwidth = .2
trend = 50
rangeLine = range(0, 100)
def smartDiv(x,y):
if y == 0:
y = 1
return x/y
Passed = [int(smartDiv(replica[x]['PassTime'],replica[x]['PassCount'])) for x in replica.keys()]
#ant.reverse()
Failed = [int(smartDiv(replica[x]['FailTime'],replica[x]['FailCount'])) for x in replica.keys()]
#sbt.reverse()
ax = getFig()
plt.bar(groups + (groupwidth*0), Failed, color='red', width=groupwidth, label='Failed')
plt.bar(groups + (groupwidth*2), Passed, color='green', width=groupwidth, label='Passed')
plt.legend(loc='best')
ax.set_title("Test Count for test type")
ax.set_xticks([x + groupwidth*1.5 for x in np.arange(6)])
ax.set_xticklabels(replica.keys())
ax.set_xlabel('Test Type')
ax.set_ylabel('Test counts')
plt.show()
if saveFigs:
plt.savefig('Resources/Imgs/BuildToolTrend.png')