public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-test][PATCH] uefi-sct/SctPkg: Add script to automatically generate test file structure.
@ 2018-11-06 10:58 Sakar Arora
  0 siblings, 0 replies; only message in thread
From: Sakar Arora @ 2018-11-06 10:58 UTC (permalink / raw)
  To: edk2-devel; +Cc: prasanth.pulla, John Powell

From: John Powell <john.powell@arm.com>

When new_test.py is run with no options, it asks the user a series
of questions about the test they wish to create and then creates the test
file structure, files, shell functions, and entries in build system
configuration files.

When run with the option -g or --guid, it just generates a GUID in a form
that matches the format used in code.

Signed-off-by: John Powell <john.powell@arm.com>
---
 uefi-sct/SctPkg/TestCreationScript/data.xml        |  23 ++
 uefi-sct/SctPkg/TestCreationScript/new_test.py     | 398 +++++++++++++++++++++
 .../SctPkg/TestCreationScript/template_BBTest.inf  |  81 +++++
 .../TestCreationScript/template_BBTestFunction.c   | 123 +++++++
 .../TestCreationScript/template_BBTestFunction.h   |  69 ++++
 .../TestCreationScript/template_BBTestMain.c       | 130 +++++++
 .../TestCreationScript/template_BBTestMain.h       |  88 +++++
 uefi-sct/SctPkg/TestCreationScript/template_Guid.c |  61 ++++
 uefi-sct/SctPkg/TestCreationScript/template_Guid.h |  66 ++++
 9 files changed, 1039 insertions(+)
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/data.xml
 create mode 100755 uefi-sct/SctPkg/TestCreationScript/new_test.py
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/template_BBTest.inf
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.c
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.h
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.c
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.h
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/template_Guid.c
 create mode 100644 uefi-sct/SctPkg/TestCreationScript/template_Guid.h

diff --git a/uefi-sct/SctPkg/TestCreationScript/data.xml b/uefi-sct/SctPkg/TestCreationScript/data.xml
new file mode 100644
index 0000000..2824d10
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/data.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<data>
+    <category>
+        <name>GenericTest</name>
+        <path>Generic</path>
+        <uuid>71652D04-BF38-434A-BCB8-6547D7FD8384</uuid>
+    </category>
+    <category>
+        <name>BootServicesTest</name>
+        <path>BootServices</path>
+        <uuid>E9EF7553-F833-4E56-96E8-38AE679523CC</uuid>
+    </category>
+    <category>
+        <name>RuntimeServicesTest</name>
+        <path>RuntimeServices</path>
+        <uuid>AFF115FB-387B-4c18-8C41-6AFC7F03BB90</uuid>
+    </category>
+    <category>
+        <name>ProtocolTest</name>
+        <path>Protocol</path>
+        <uuid>None</uuid>
+    </category>
+</data>
\ No newline at end of file
diff --git a/uefi-sct/SctPkg/TestCreationScript/new_test.py b/uefi-sct/SctPkg/TestCreationScript/new_test.py
new file mode 100755
index 0000000..3f2f43e
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/new_test.py
@@ -0,0 +1,398 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import shutil
+import fileinput
+import datetime
+import uuid
+import xml.etree.ElementTree
+from collections import namedtuple
+import re
+import argparse
+
+# configuration file paths
+
+path_to_sctpkg = "../"
+path_to_efi_categories = "TestCase/UEFI/EFI/"
+path_to_xml = "data.xml"
+
+# test configuration variables
+
+ConfigCategory = ""
+ConfigFileGuid = ""
+ConfigTestName = ""
+ConfigTestDescription = ""
+ConfigTestGuid = ""
+ConfigTestCaseName = ""
+ConfigTestCaseGuid = ""
+ConfigTestCaseDescription = ""
+ConfigAssertionGuid = ""
+ConfigProtocolGuid = ""
+ConfigCGFWCategory = ""
+
+# checkpoint variables so the script can undo changes in the event of some failure
+CheckPointCreatedFileStructure = False
+CheckPointCreatedNewCategoryIni = False
+CheckPointCreatedNewCommonGenFrameworkSh = False
+
+#function declarations
+
+def isInt(s):
+    try:
+        int(s)
+        return True
+    except ValueError:
+        return False
+
+def isHex(s):
+    try:
+        int(s, 16)
+        return True
+    except ValueError:
+        return False
+
+def openFile(path, options):
+    try:
+        file = open(path, options)
+        return file
+    except IOError:
+        return None
+
+def replaceTextPlaceholderInFile(inFilePath):
+    now = datetime.datetime.now()
+
+    renamedInFilePath = ("%s.old" % inFilePath)
+    os.rename(inFilePath, renamedInFilePath)
+
+    inFile = openFile(inFilePath, "w")
+    if inFile == None:
+        print "ERROR: Could not open \"%s\"" % inFilePath
+        return 1
+
+    renamedInFile = openFile(renamedInFilePath, "r")
+    if inFile == None:
+        print "ERROR: Could not open \"%s\"" % renamedInFilePath
+        return 1
+
+    for line in renamedInFile:
+        line = line.replace("$<currentyear>$", ("%d" % now.year))
+        line = line.replace("$<fileguid>$", getHyphenGuid(ConfigFileGuid))
+        line = line.replace("$<testname>$", ConfigTestName)
+        line = line.replace("$<testnameupper>$", ConfigTestName.upper())
+        line = line.replace("$<testdescription>$", ConfigTestDescription)
+        line = line.replace("$<testcasename>$", ConfigTestCaseName)
+        line = line.replace("$<testcasenameupper>$", ConfigTestCaseName.upper())
+        line = line.replace("$<testcasedescription>$", ConfigTestCaseDescription)
+        line = line.replace("$<testcaseguid>$", getCodeGuid(ConfigTestCaseGuid))
+        line = line.replace("$<assertionguid>$", getCodeGuid(ConfigAssertionGuid))
+        if ConfigCategory.name == "ProtocolTest":
+            line = line.replace("$<testguid>$", getCodeGuid(ConfigProtocolGuid))
+        else:
+            line = line.replace("$<testguid>$", getCodeGuid(ConfigTestGuid))
+        inFile.write(line)
+
+    inFile.close()
+    renamedInFile.close()
+    os.remove(renamedInFilePath)
+
+    return 0
+
+def getRawGuid():
+    guid = uuid.uuid4()
+    s = "%s" % guid.hex
+    return s
+
+def getCodeGuid(s):
+    return "{ 0x%s, 0x%s, 0x%s, {0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s }}" % (s[0:8],s[8:12],s[12:16],s[16:18],s[18:20],s[20:22],s[22:24],s[24:26],s[26:28],s[28:30],s[30:])
+
+def getHyphenGuid(s):
+    return "%s-%s-%s-%s-%s" % (s[0:8], s[8:12], s[12:16], s[16:20], s[20:32])
+
+def faultHandler(s):
+    print "Undoing changes made to file structure..."
+    if CheckPointCreatedFileStructure:
+        shutil.rmtree(os.path.join(path_to_sctpkg, path_to_efi_categories, ConfigCategory.path, ConfigTestName))
+    if CheckPointCreatedNewCategoryIni:
+        os.remove(os.path.join(path_to_sctpkg, "Config/Data/Category.ini.new"))
+    if CheckPointCreatedNewCommonGenFrameworkSh:
+        os.remove(os.path.join(path_to_sctpkg, "CommonGenFramework.sh.new"))
+    print "Exiting..."
+    sys.exit()
+
+def isValidSentence(s):
+    if all(x.isalpha() or x.isspace() or isInt(x) or x == "." for x in s):
+        return True
+    else:
+        return False
+
+# entry point
+
+parser = argparse.ArgumentParser(description='Process output from UEFI in FVP.')
+parser.add_argument("-g", "--guid", required=False, default=False, action="store_true", help="Generates a GUID.")
+args = parser.parse_args()
+
+if args.guid == True:
+    guid = getRawGuid()
+    print ""
+    print "%s" % getCodeGuid(guid)
+    print ""
+    print "%s" % getHyphenGuid(guid)
+    print ""
+    sys.exit()
+
+# welcome text
+print "*******************************************************************************"
+print "*                   SCT Test Case Template Creation Wizard                    *"
+print "*******************************************************************************"
+print ""
+
+
+# requesting category
+CategoryEntry = namedtuple("CategoryEntry", "name path uuid")
+Categories = []
+i = 0
+tree = xml.etree.ElementTree.parse(path_to_xml)
+root = tree.getroot()
+for category in root.findall("category"):
+    Categories.append(CategoryEntry(category.find("name").text, category.find("path").text, category.find("uuid").text))
+    print "(%d) %s" % (i, Categories[i].name)
+    i = i + 1
+while True:
+    print "Which category do you want to use for your test? (integer)"
+    UserString = raw_input("> ")
+    if isInt(UserString):
+        UserValue = int(UserString)
+        if UserValue >= i or UserValue < 0:
+            print "Invalid entry \"%s\"" % UserString
+        else:
+            ConfigCategory = Categories[UserValue]
+            print ""
+            break
+    else:
+        print "Invalid entry \"%s\"" % UserString
+
+
+# if protocol test is selected
+if ConfigCategory.name == "ProtocolTest":
+    print "You have selected ProtocolTest, you must enter the UUID of the protocol under test now as a string of 32 hex digits."
+    while True:
+        UserString = raw_input("> ")
+        if len(UserString) == 32 and isHex(UserString):
+            ConfigTestGuid = UserString
+            ConfigProtocolGuid = UserString
+            break
+        else:
+            print "Invalid entry \"%s\"" % UserString
+    print ""
+
+
+# requesting test name
+print "What do you want to call your test? (string)"
+while True:
+    ConfigTestName = raw_input("> ")
+    if ConfigTestName.isalnum() == True and os.path.isdir(os.path.join(path_to_sctpkg, path_to_efi_categories, ConfigCategory.path, ConfigTestName)) == False:
+        break
+    else:
+        print "Invalid entry \"%s\"" % ConfigTestName
+print ""
+
+
+# requestion test description
+print "Please enter a short (~1 sentence) description of your test. (string)"
+while True:
+    ConfigTestDescription = raw_input("> ")
+    if isValidSentence(ConfigTestDescription):
+        break
+    else:
+        print "Invalid entry \"%s\"" % ConfigTestDescription
+print ""
+
+
+# requesting name of first test case
+print "What do you want to call the first test case? (string)"
+while True:
+    ConfigTestCaseName = raw_input("> ")
+    if ConfigTestCaseName.isalnum():
+        break
+    else:
+        print "Invalid entry \"%s\"" % ConfigTestCaseName
+print ""
+
+
+# requesting description of the test case
+print "Please enter a short (~1 sentence) description of your test case. (string)"
+while True:
+    ConfigTestCaseDescription = raw_input("> ")
+    if isValidSentence(ConfigTestCaseDescription):
+        break
+    else:
+        print "Invalid entry \"%s\"" % ConfigTestCaseDescription
+print ""
+
+
+# asking where to place the new test in CommonGenFramework.sh
+cgfwCategories = []
+cgfw = openFile(os.path.join(path_to_sctpkg, "CommonGenFramework.sh"), "r")
+if cgfw == None:
+    print "ERROR: Could not open \"%s\"" % (os.path.join(path_to_sctpkg, "CommonGenFramework.sh"))
+    faultHandler()
+print "Groups in CommonGenFramework.sh"
+i = 0
+for line in cgfw:
+    line = line.split()
+    if len(line) > 4 and line[0] == "if" and line[1] == "[" and line[2] == "$1" and line[3] == "=":
+        cgfwCategories.append(line[4].replace("\"", ""))
+        print "(%d) %s" % (i, cgfwCategories[i])
+        i = i + 1
+print "What group would you like to place your new test in?  Leave it blank if you wish to do this yourself. (integer)"
+while True:
+    UserString = raw_input("> ")
+    if isInt(UserString) and int(UserString) >= 0 and int(UserString) < i:
+        ConfigCGFWCategory = cgfwCategories[int(UserString)]
+        break
+    else:
+        print "Invalid entry \"%s\"" % UserString
+print ""
+
+
+# making sure options are correct
+print "New Test Parameters"
+print "  Category:                 %s" % ConfigCategory.name
+print "  Test Name:                %s" % ConfigTestName
+print "  Test Description:         %s" % ConfigTestDescription
+print "  Test Case Name:           %s" % ConfigTestCaseName
+print "  Test Case Description:    %s" % ConfigTestCaseDescription
+print "  CommonGenFramework Group: %s" % ConfigCGFWCategory
+
+while True:
+    print "Do you wish to apply these changes? (y/n)"
+    UserString = raw_input("> ")
+    if UserString[0] == "y" or UserString[0] == "Y":
+        print ""
+        break
+    elif UserString[0] == "n" or UserString[0] == "N":
+        print "Exiting..."
+        sys.exit()
+    else:
+        print "Invalid entry \"%s\"" % UserString
+
+
+# building test files
+print "Building Test Files..."
+PathToTestDirectory = os.path.join(path_to_sctpkg, path_to_efi_categories, ConfigCategory.path, ConfigTestName, "BlackBoxTest")
+os.makedirs(PathToTestDirectory)
+CheckPointCreatedFileStructure = True
+shutil.copyfile("template_BBTest.inf", os.path.join(PathToTestDirectory, ("%sBBTest.inf" % ConfigTestName)))
+shutil.copyfile("template_Guid.c", os.path.join(PathToTestDirectory, "Guid.c"))
+shutil.copyfile("template_Guid.h", os.path.join(PathToTestDirectory, "Guid.h"))
+shutil.copyfile("template_BBTestFunction.c", os.path.join(PathToTestDirectory, ("%sBBTestFunction.c" % ConfigTestName)))
+shutil.copyfile("template_BBTestFunction.h", os.path.join(PathToTestDirectory, ("%sBBTestFunction.h" % ConfigTestName)))
+shutil.copyfile("template_BBTestMain.c", os.path.join(PathToTestDirectory, ("%sBBTestMain.c" % ConfigTestName)))
+shutil.copyfile("template_BBTestMain.h", os.path.join(PathToTestDirectory, ("%sBBTestMain.h" % ConfigTestName)))
+
+
+# generating guids
+print "Generating GUIDs..."
+ConfigFileGuid = getRawGuid()
+ConfigTestCaseGuid = getRawGuid()
+ConfigAssertionGuid = getRawGuid()
+if ConfigCategory.name != "ProtocolTest":
+    ConfigTestGuid = getRawGuid()
+
+
+# replacing placeholder text in files
+print "Applying changes to templates..."
+replaceTextPlaceholderInFile(os.path.join(PathToTestDirectory, ("%sBBTest.inf" % ConfigTestName)))
+replaceTextPlaceholderInFile(os.path.join(PathToTestDirectory, "Guid.c"))
+replaceTextPlaceholderInFile(os.path.join(PathToTestDirectory, "Guid.h"))
+replaceTextPlaceholderInFile(os.path.join(PathToTestDirectory, ("%sBBTestFunction.c" % ConfigTestName)))
+replaceTextPlaceholderInFile(os.path.join(PathToTestDirectory, ("%sBBTestFunction.h" % ConfigTestName)))
+replaceTextPlaceholderInFile(os.path.join(PathToTestDirectory, ("%sBBTestMain.c" % ConfigTestName)))
+replaceTextPlaceholderInFile(os.path.join(PathToTestDirectory, ("%sBBTestMain.h" % ConfigTestName)))
+
+
+# adding entry to SctPkg/Config/Data/Category.ini
+print "Updating SctPkg/Config/Data/Category.ini..."
+if(os.path.isfile("Category.ini.backup")):
+    os.remove("Category.ini.backup")
+shutil.copyfile(os.path.join(path_to_sctpkg, "Config/Data/Category.ini"), "Category.ini.backup")
+if ConfigCategory.name == "ProtocolTest":
+    CategoryFileEntry = "\n[Category Data]\nRevision      = 0x00010000\nCategoryGuid  = %s\nInterfaceGuid = %s\nName          = %s\%s\nDescription   = %s\n" % (getHyphenGuid(ConfigTestGuid), getHyphenGuid(ConfigProtocolGuid), ConfigCategory.name, ConfigTestName, ConfigTestDescription)
+else:
+    CategoryFileEntry = "\n[Category Data]\nRevision      = 0x00010000\nCategoryGuid  = %s\nInterfaceGuid = %s\nName          = %s\%s\nDescription   = %s\n" % (getHyphenGuid(ConfigTestGuid), ConfigCategory.uuid, ConfigCategory.name, ConfigTestName, ConfigTestDescription)
+CategoryIni = openFile(os.path.join(path_to_sctpkg, "Config/Data/Category.ini"), "r")
+if CategoryIni == None:
+    print "ERROR: Could not open \"%s\"" % os.path.join(path_to_sctpkg, "Config/Data/Category.ini")
+    faultHandler()
+CategoryIniNew = openFile(os.path.join(path_to_sctpkg, "Config/Data/Category.ini.new"), "w")
+if CategoryIniNew == None:
+    print "ERROR: Could not open \"%s\"" % os.path.join(path_to_sctpkg, "Config/Data/Category.ini.new")
+    faultHandler()
+CheckPointCreatedNewCategoryIni = True
+while True:
+    line = CategoryIni.readline()
+    if line == "":
+        if ConfigCategory.name == "ProtocolTest":
+            CategoryIniNew.write(CategoryFileEntry)
+        break
+    CategoryIniNew.write(line)
+    line = line.split()
+    if len(line) == 3 and line[0] == "Name" and line[1] == "=" and line[2] == ConfigCategory.name:
+        line = CategoryIni.readline()
+        CategoryIniNew.write(line)
+        CategoryIniNew.write(CategoryFileEntry)
+CategoryIni.close()
+CategoryIniNew.close()
+
+
+# adding entry to CommonGenFramework.sh
+print "Updating SctPkg/CommonGenFramework.sh..."
+if os.path.isfile("CommonGenFramework.sh.backup"):
+    os.remove("CommonGenFramework.sh.backup")
+shutil.copyfile(os.path.join(path_to_sctpkg, "CommonGenFramework.sh"), "CommonGenFramework.sh.backup")
+ComGenFwSh = openFile(os.path.join(path_to_sctpkg, "CommonGenFramework.sh"), "r")
+if ComGenFwSh == None:
+    print "ERROR: Could not open \"%s\"" % os.path.join(path_to_sctpkg, "CommonGenFramework.sh")
+    faultHandler()
+ComGenFwShNew = openFile(os.path.join(path_to_sctpkg, "CommonGenFramework.sh.new"), "w")
+if ComGenFwShNew == None:
+    print "ERROR: Could not open \"%s\"" % os.path.join(path_to_sctpkg, "CommonGenFramework.sh.new")
+    faultHandler()
+CheckPointCreatedNewCommonGenFrameworkSh = True
+while True:
+    line = ComGenFwSh.readline()
+    if line == "":
+        break
+    ComGenFwShNew.write(line)
+    if line.find(ConfigCGFWCategory) != -1:
+        while True:
+            line = ComGenFwSh.readline()
+            if line == "":
+                break
+            if line[0] == "f" and line[1] == "i" and line[2] == "\n":
+                ComGenFwShNew.write("    # automatically generated test entry\n")
+                ComGenFwShNew.write("    cp $ProcessorType/%sBBTest.efi    $Framework/Test/  > NUL\n\n" % ConfigTestName)
+                ComGenFwShNew.write(line)
+                break
+            ComGenFwShNew.write(line)
+ComGenFwSh.close()
+ComGenFwShNew.close()
+
+
+# finishing up by removing original versions of files and renaming the new ones
+os.remove(os.path.join(path_to_sctpkg, "Config/Data/Category.ini"))
+os.remove(os.path.join(path_to_sctpkg, "CommonGenFramework.sh"))
+os.rename(os.path.join(path_to_sctpkg, "Config/Data/Category.ini.new"), os.path.join(path_to_sctpkg, "Config/Data/Category.ini"))
+os.rename(os.path.join(path_to_sctpkg, "CommonGenFramework.sh.new"), os.path.join(path_to_sctpkg, "CommonGenFramework.sh"))
+os.system("chmod +x %s" % os.path.join(path_to_sctpkg, "CommonGenFramework.sh"))
+
+
+# prompting user to modify their DSC file
+print ""
+print "IMPORTANT: Paste the following line into your projects .dsc file."
+print "SctPkg/TestCase/UEFI/EFI/%s/%s/BlackBoxTest/%sBBTest.inf" % (ConfigCategory.path, ConfigTestName, ConfigTestName)
+print ""
+print "Done, backups of the original Category.ini and CommonGenFramework.sh can be found in the TestCreationScript directory."
+
+sys.exit()
diff --git a/uefi-sct/SctPkg/TestCreationScript/template_BBTest.inf b/uefi-sct/SctPkg/TestCreationScript/template_BBTest.inf
new file mode 100644
index 0000000..5cb5a67
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/template_BBTest.inf
@@ -0,0 +1,81 @@
+#
+# The material contained herein is not a license, either
+# expressly or impliedly, to any intellectual property owned
+# or controlled by any of the authors or developers of this
+# material or to any contribution thereto. The material
+# contained herein is provided on an "AS IS" basis and, to the
+# maximum extent permitted by applicable law, this information
+# is provided AS IS AND WITH ALL FAULTS, and the authors and
+# developers of this material hereby disclaim all other
+# warranties and conditions, either express, implied or
+# statutory, including, but not limited to, any (if any)
+# implied warranties, duties or conditions of merchantability,
+# of fitness for a particular purpose, of accuracy or
+# completeness of responses, of results, of workmanlike
+# effort, of lack of viruses and of lack of negligence, all
+# with regard to this material and any contribution thereto.
+# Designers must not rely on the absence or characteristics of
+# any features or instructions marked "reserved" or
+# "undefined." The Unified EFI Forum, Inc. reserves any
+# features or instructions so marked for future definition and
+# shall have no responsibility whatsoever for conflicts or
+# incompatibilities arising from future changes to them. ALSO,
+# THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+# QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+# NON-INFRINGEMENT WITH REGARD TO THE TEST SUITE AND ANY
+# CONTRIBUTION THERETO.
+#
+# IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR
+# ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR
+# THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST
+# PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL,
+# CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER
+# UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY
+# WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS
+# DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
+# THE POSSIBILITY OF SUCH DAMAGES.
+#
+# Copyright 2006 - $<currentyear>$ Unified EFI, Inc. All
+# Rights Reserved, subject to all existing rights in all
+# matters included within this Test Suite, to which United
+# EFI, Inc. makes no claim of right.
+#
+# Copyright (c) $<currentyear>$, ARM Corporation. All rights reserved.
+#
+#
+#/*++
+#
+# Module Name:
+#
+#   $<testname>$BBTest.inf
+#
+# Abstract:
+#
+#   Component description file for $<testname>$ tests.
+#
+#--*/
+
+[Defines]
+  INF_VERSION          = 0x00010005
+  BASE_NAME            = $<testname>$BBTest
+  FILE_GUID            = $<fileguid>$
+  MODULE_TYPE          = UEFI_DRIVER
+  VERSION_STRING       = 1.0
+  ENTRY_POINT          = InitializeBBTest$<testname>$
+
+[Sources.common]
+  $<testname>$BBTestMain.c
+  $<testname>$BBTestFunction.c
+  Guid.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  SctPkg/SctPkg.dec
+  SctPkg/UEFI/UEFI.dec
+
+[LibraryClasses]
+  UefiDriverEntryPoint
+  SctLib
+  EfiTestLib
+
+[Protocols]
diff --git a/uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.c b/uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.c
new file mode 100644
index 0000000..2cd0e68
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.c
@@ -0,0 +1,123 @@
+/*++
+  The material contained herein is not a license, either
+  expressly or impliedly, to any intellectual property owned
+  or controlled by any of the authors or developers of this
+  material or to any contribution thereto. The material
+  contained herein is provided on an "AS IS" basis and, to the
+  maximum extent permitted by applicable law, this information
+  is provided AS IS AND WITH ALL FAULTS, and the authors and
+  developers of this material hereby disclaim all other
+  warranties and conditions, either express, implied or
+  statutory, including, but not limited to, any (if any)
+  implied warranties, duties or conditions of merchantability,
+  of fitness for a particular purpose, of accuracy or
+  completeness of responses, of results, of workmanlike
+  effort, of lack of viruses and of lack of negligence, all
+  with regard to this material and any contribution thereto.
+  Designers must not rely on the absence or characteristics of
+  any features or instructions marked "reserved" or
+  "undefined." The Unified EFI Forum, Inc. reserves any
+  features or instructions so marked for future definition and
+  shall have no responsibility whatsoever for conflicts or
+  incompatibilities arising from future changes to them. ALSO,
+  THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+  QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+  NON-INFRINGEMENT WITH REGARD TO THE TEST SUITE AND ANY
+  CONTRIBUTION THERETO.
+
+  IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR
+  ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR
+  THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST
+  PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL,
+  CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER
+  UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY
+  WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS
+  DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
+  THE POSSIBILITY OF SUCH DAMAGES.
+
+  Copyright 2006 - $<currentyear>$ Unified EFI, Inc. All
+  Rights Reserved, subject to all existing rights in all
+  matters included within this Test Suite, to which United
+  EFI, Inc. makes no claim of right.
+
+  Copyright (c) $<currentyear>$, ARM Corporation. All rights reserved.
+
+--*/
+/*++
+
+Module Name:
+
+  $<testname>$BBTestFunction.c
+
+Abstract:
+
+  Test case function definitions for $<testname>$.
+
+--*/
+
+#include "$<testname>$BBTestMain.h"
+#include "$<testname>$BBTestFunction.h"
+#include "SctLib.h"
+#include "Guid.h"
+
+/**
+ *  Entrypoint for $<testcasename>$ Test.
+ *  @param This a pointer of EFI_BB_TEST_PROTOCOL.
+ *  @param ClientInterface a pointer to the interface to be tested.
+ *  @param TestLevel test "thoroughness" control.
+ *  @param SupportHandle a handle containing protocols required.
+ *  @return EFI_SUCCESS Finish the test successfully.
+ */
+
+EFI_STATUS
+BBTest$<testcasename>$Test (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  )
+{
+
+  EFI_STANDARD_TEST_LIBRARY_PROTOCOL  *StandardLib;
+  EFI_STATUS                          Status;
+  EFI_TEST_ASSERTION                  AssertionType;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+              SupportHandle,
+              &gEfiStandardTestLibraryGuid,
+              (VOID **) &StandardLib
+              );
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  //
+  // Your code goes here
+  //
+
+  StandardLib->RecordAssertion (
+              StandardLib,
+              EFI_TEST_ASSERTION_PASSED,
+              g$<testname>$Assertion001Guid,
+              L"$<testcasename>$",
+              L"%a:%d",
+              __FILE__,
+              __LINE__
+              );
+
+  //
+  // Function calls like above are used to record test results.
+  // The actual return value of this function is used to tell
+  // the framework whether the tests completed successfully or
+  // if there was some fault in the test itself.  For example, not
+  // being able to allocate a buffer because the system is out of
+  // memory would return an error, but a test case failing because
+  // a register being checked does not contain the right value
+  // would return EFI_SUCCESS.
+  //
+
+  return EFI_SUCCESS;
+}
diff --git a/uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.h b/uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.h
new file mode 100644
index 0000000..1f4b70b
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/template_BBTestFunction.h
@@ -0,0 +1,69 @@
+/*++
+  The material contained herein is not a license, either
+  expressly or impliedly, to any intellectual property owned
+  or controlled by any of the authors or developers of this
+  material or to any contribution thereto. The material
+  contained herein is provided on an "AS IS" basis and, to the
+  maximum extent permitted by applicable law, this information
+  is provided AS IS AND WITH ALL FAULTS, and the authors and
+  developers of this material hereby disclaim all other
+  warranties and conditions, either express, implied or
+  statutory, including, but not limited to, any (if any)
+  implied warranties, duties or conditions of merchantability,
+  of fitness for a particular purpose, of accuracy or
+  completeness of responses, of results, of workmanlike
+  effort, of lack of viruses and of lack of negligence, all
+  with regard to this material and any contribution thereto.
+  Designers must not rely on the absence or characteristics of
+  any features or instructions marked "reserved" or
+  "undefined." The Unified EFI Forum, Inc. reserves any
+  features or instructions so marked for future definition and
+  shall have no responsibility whatsoever for conflicts or
+  incompatibilities arising from future changes to them. ALSO,
+  THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+  QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+  NON-INFRINGEMENT WITH REGARD TO THE TEST SUITE AND ANY
+  CONTRIBUTION THERETO.
+
+  IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR
+  ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR
+  THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST
+  PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL,
+  CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER
+  UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY
+  WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS
+  DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
+  THE POSSIBILITY OF SUCH DAMAGES.
+
+  Copyright 2006 - $<currentyear>$ Unified EFI, Inc. All
+  Rights Reserved, subject to all existing rights in all
+  matters included within this Test Suite, to which United
+  EFI, Inc. makes no claim of right.
+
+  Copyright (c) $<currentyear>$, ARM Corporation. All rights reserved.
+
+--*/
+/*++
+
+Module Name:
+
+  $<testname>$BBTestFunction.h
+
+Abstract:
+
+  Contains definitions and prototypes for test case functions.
+
+--*/
+
+#ifndef _$<testnameupper>$_BB_TEST_FUNCTION_H_
+#define _$<testnameupper>$_BB_TEST_FUNCTION_H_
+
+EFI_STATUS
+BBTest$<testcasename>$Test (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  );
+
+#endif /* _$<testnameupper>$_BB_TEST_FUNCTION_H_ */
diff --git a/uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.c b/uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.c
new file mode 100644
index 0000000..1bd4845
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.c
@@ -0,0 +1,130 @@
+/*++
+  The material contained herein is not a license, either
+  expressly or impliedly, to any intellectual property owned
+  or controlled by any of the authors or developers of this
+  material or to any contribution thereto. The material
+  contained herein is provided on an "AS IS" basis and, to the
+  maximum extent permitted by applicable law, this information
+  is provided AS IS AND WITH ALL FAULTS, and the authors and
+  developers of this material hereby disclaim all other
+  warranties and conditions, either express, implied or
+  statutory, including, but not limited to, any (if any)
+  implied warranties, duties or conditions of merchantability,
+  of fitness for a particular purpose, of accuracy or
+  completeness of responses, of results, of workmanlike
+  effort, of lack of viruses and of lack of negligence, all
+  with regard to this material and any contribution thereto.
+  Designers must not rely on the absence or characteristics of
+  any features or instructions marked "reserved" or
+  "undefined." The Unified EFI Forum, Inc. reserves any
+  features or instructions so marked for future definition and
+  shall have no responsibility whatsoever for conflicts or
+  incompatibilities arising from future changes to them. ALSO,
+  THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+  QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+  NON-INFRINGEMENT WITH REGARD TO THE TEST SUITE AND ANY
+  CONTRIBUTION THERETO.
+
+  IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR
+  ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR
+  THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST
+  PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL,
+  CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER
+  UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY
+  WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS
+  DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
+  THE POSSIBILITY OF SUCH DAMAGES.
+
+  Copyright 2006 - $<currentyear>$ Unified EFI, Inc. All
+  Rights Reserved, subject to all existing rights in all
+  matters included within this Test Suite, to which United
+  EFI, Inc. makes no claim of right.
+
+  Copyright (c) $<currentyear>$, ARM Corporation. All rights reserved.
+
+--*/
+/*++
+
+Module Name:
+
+  $<testname>$BBTestMain.c
+
+Abstract:
+
+  Test driver for $<testname>$ tests.
+
+--*/
+
+#include "SctLib.h"
+#include "$<testname>$BBTestMain.h"
+#include "$<testname>$BBTestFunction.h"
+
+EFI_BB_TEST_PROTOCOL_FIELD gBBTestProtocolField = {
+  $<testnameupper>$_TEST_REVISION,
+  $<testnameupper>$_TEST_GUID,
+  L"$<testname>$ Tests",
+  L"$<testdescription>$"
+};
+
+EFI_GUID gSupportProtocolGuid1[2] = {
+  EFI_STANDARD_TEST_LIBRARY_GUID,
+  EFI_NULL_GUID
+};
+
+EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
+  {
+    $<testnameupper>$_$<testcasenameupper>$_GUID,
+    L"$<testcasename>$",
+    L"$<testcasedescription>$",
+    EFI_TEST_LEVEL_DEFAULT,
+    gSupportProtocolGuid1,
+    EFI_TEST_CASE_AUTO,
+    BBTest$<testcasename>$Test
+  },
+  EFI_NULL_GUID
+};
+
+EFI_BB_TEST_PROTOCOL *gBBTestProtocolInterface;
+
+/**
+ *  The driver's Unload function
+ *  @param  ImageHandle The test driver image handle
+ *  @return EFI_SUCCESS Indicates the interface was Uninstalled
+*/
+EFI_STATUS
+BBTest$<testname>$Unload (
+  IN EFI_HANDLE       ImageHandle
+  )
+{
+  return EfiUninstallAndFreeBBTestInterface (
+              ImageHandle,
+              gBBTestProtocolInterface
+           );
+}
+
+/**
+ *  Creates/installs the BlackBox Interface and eminating Entry Point
+ *  node list.
+ *  @param  ImageHandle The test driver image handle
+ *  @param  SystemTable Pointer to System Table
+ *  @return EFI_SUCCESS Indicates the interface was installed
+ *  @return EFI_OUT_OF_RESOURCES Indicates space for the new handle could not be allocated
+ *  @return EFI_INVALID_PARAMETER: One of the parameters has an invalid value.
+ */
+EFI_STATUS
+InitializeBBTest$<testname>$ (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_SYSTEM_TABLE     *SystemTable
+  )
+{
+
+  EfiInitializeTestLib (ImageHandle, SystemTable);
+
+  return EfiInitAndInstallBBTestInterface (
+              &ImageHandle,
+              &gBBTestProtocolField,
+              gBBTestEntryField,
+              BBTest$<testname>$Unload,
+              &gBBTestProtocolInterface
+           );
+}
diff --git a/uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.h b/uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.h
new file mode 100644
index 0000000..c146984
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/template_BBTestMain.h
@@ -0,0 +1,88 @@
+/*++
+  The material contained herein is not a license, either
+  expressly or impliedly, to any intellectual property owned
+  or controlled by any of the authors or developers of this
+  material or to any contribution thereto. The material
+  contained herein is provided on an "AS IS" basis and, to the
+  maximum extent permitted by applicable law, this information
+  is provided AS IS AND WITH ALL FAULTS, and the authors and
+  developers of this material hereby disclaim all other
+  warranties and conditions, either express, implied or
+  statutory, including, but not limited to, any (if any)
+  implied warranties, duties or conditions of merchantability,
+  of fitness for a particular purpose, of accuracy or
+  completeness of responses, of results, of workmanlike
+  effort, of lack of viruses and of lack of negligence, all
+  with regard to this material and any contribution thereto.
+  Designers must not rely on the absence or characteristics of
+  any features or instructions marked "reserved" or
+  "undefined." The Unified EFI Forum, Inc. reserves any
+  features or instructions so marked for future definition and
+  shall have no responsibility whatsoever for conflicts or
+  incompatibilities arising from future changes to them. ALSO,
+  THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+  QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+  NON-INFRINGEMENT WITH REGARD TO THE TEST SUITE AND ANY
+  CONTRIBUTION THERETO.
+
+  IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR
+  ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR
+  THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST
+  PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL,
+  CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER
+  UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY
+  WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS
+  DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
+  THE POSSIBILITY OF SUCH DAMAGES.
+
+  Copyright 2006 - $<currentyear>$ Unified EFI, Inc. All
+  Rights Reserved, subject to all existing rights in all
+  matters included within this Test Suite, to which United
+  EFI, Inc. makes no claim of right.
+
+  Copyright (c) $<currentyear>$, ARM Corporation. All rights reserved.
+
+--*/
+/*++
+
+Module Name:
+
+  $<testname>$BBTestMain.h
+
+Abstract:
+
+  Contains definitions for test information and test GUIDs.
+
+--*/
+
+#ifndef _$<testnameupper>$_TEST_MAIN_H_
+#define _$<testnameupper>$_TEST_MAIN_H_
+
+#include "Efi.h"
+#include "Guid.h"
+#include <Library/EfiTestLib.h>
+
+#define $<testnameupper>$_TEST_REVISION 0x00010000
+
+#define $<testnameupper>$_TEST_GUID     \
+  $<testguid>$
+
+EFI_STATUS
+InitializeBBTest$<testname>$ (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_SYSTEM_TABLE     *SystemTable
+  );
+
+EFI_STATUS
+BBTest$<testname>$Unload (
+  IN EFI_HANDLE       ImageHandle
+  );
+
+//
+// Entry GUIDs
+//
+
+#define $<testnameupper>$_$<testcasenameupper>$_GUID \
+  $<testcaseguid>$
+
+#endif /* _$<testnameupper>$_TEST_MAIN_H_ */
diff --git a/uefi-sct/SctPkg/TestCreationScript/template_Guid.c b/uefi-sct/SctPkg/TestCreationScript/template_Guid.c
new file mode 100644
index 0000000..dc675e0
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/template_Guid.c
@@ -0,0 +1,61 @@
+/*++
+  The material contained herein is not a license, either
+  expressly or impliedly, to any intellectual property owned
+  or controlled by any of the authors or developers of this
+  material or to any contribution thereto. The material
+  contained herein is provided on an "AS IS" basis and, to the
+  maximum extent permitted by applicable law, this information
+  is provided AS IS AND WITH ALL FAULTS, and the authors and
+  developers of this material hereby disclaim all other
+  warranties and conditions, either express, implied or
+  statutory, including, but not limited to, any (if any)
+  implied warranties, duties or conditions of merchantability,
+  of fitness for a particular purpose, of accuracy or
+  completeness of responses, of results, of workmanlike
+  effort, of lack of viruses and of lack of negligence, all
+  with regard to this material and any contribution thereto.
+  Designers must not rely on the absence or characteristics of
+  any features or instructions marked "reserved" or
+  "undefined." The Unified EFI Forum, Inc. reserves any
+  features or instructions so marked for future definition and
+  shall have no responsibility whatsoever for conflicts or
+  incompatibilities arising from future changes to them. ALSO,
+  THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+  QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+  NON-INFRINGEMENT WITH REGARD TO THE TEST SUITE AND ANY
+  CONTRIBUTION THERETO.
+
+  IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR
+  ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR
+  THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST
+  PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL,
+  CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER
+  UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY
+  WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS
+  DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
+  THE POSSIBILITY OF SUCH DAMAGES.
+
+  Copyright 2006 - $<currentyear>$ Unified EFI, Inc. All
+  Rights Reserved, subject to all existing rights in all
+  matters included within this Test Suite, to which United
+  EFI, Inc. makes no claim of right.
+
+  Copyright (c) $<currentyear>$, ARM Corporation. All rights reserved.
+
+--*/
+/*++
+
+Module Name:
+
+  Guid.c
+
+Abstract:
+
+  Global variable assignments for GUIDs used in test assertions.
+
+--*/
+
+#include "Efi.h"
+#include "Guid.h"
+
+EFI_GUID g$<testname>$Assertion001Guid = $<testnameupper>$_ASSERTION_001_GUID;
diff --git a/uefi-sct/SctPkg/TestCreationScript/template_Guid.h b/uefi-sct/SctPkg/TestCreationScript/template_Guid.h
new file mode 100644
index 0000000..bc31564
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCreationScript/template_Guid.h
@@ -0,0 +1,66 @@
+/*++
+  The material contained herein is not a license, either
+  expressly or impliedly, to any intellectual property owned
+  or controlled by any of the authors or developers of this
+  material or to any contribution thereto. The material
+  contained herein is provided on an "AS IS" basis and, to the
+  maximum extent permitted by applicable law, this information
+  is provided AS IS AND WITH ALL FAULTS, and the authors and
+  developers of this material hereby disclaim all other
+  warranties and conditions, either express, implied or
+  statutory, including, but not limited to, any (if any)
+  implied warranties, duties or conditions of merchantability,
+  of fitness for a particular purpose, of accuracy or
+  completeness of responses, of results, of workmanlike
+  effort, of lack of viruses and of lack of negligence, all
+  with regard to this material and any contribution thereto.
+  Designers must not rely on the absence or characteristics of
+  any features or instructions marked "reserved" or
+  "undefined." The Unified EFI Forum, Inc. reserves any
+  features or instructions so marked for future definition and
+  shall have no responsibility whatsoever for conflicts or
+  incompatibilities arising from future changes to them. ALSO,
+  THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+  QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+  NON-INFRINGEMENT WITH REGARD TO THE TEST SUITE AND ANY
+  CONTRIBUTION THERETO.
+
+  IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR
+  ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR
+  THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST
+  PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL,
+  CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER
+  UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY
+  WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS
+  DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
+  THE POSSIBILITY OF SUCH DAMAGES.
+
+  Copyright 2006 - $<currentyear>$ Unified EFI, Inc. All
+  Rights Reserved, subject to all existing rights in all
+  matters included within this Test Suite, to which United
+  EFI, Inc. makes no claim of right.
+
+  Copyright (c) $<currentyear>$, ARM Corporation. All rights reserved.
+
+--*/
+/*++
+
+Module Name:
+
+  Guid.h
+
+Abstract:
+
+  Definitions for GUIDs used in test assertions.
+
+--*/
+
+#ifndef _$<testnameupper>$_GUID_H_
+#define _$<testnameupper>$_GUID_H_
+
+#define $<testnameupper>$_ASSERTION_001_GUID \
+  $<assertionguid>$
+
+extern EFI_GUID g$<testname>$Assertion001Guid;
+
+#endif /* _$<testnameupper>$_GUID_H_ */
-- 
2.7.4



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2018-11-06 10:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-06 10:58 [edk2-test][PATCH] uefi-sct/SctPkg: Add script to automatically generate test file structure Sakar Arora

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox