<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Operator SDK – Testing Operators</title>
    <link>/docs/testing-operators/</link>
    <description>Recent content in Testing Operators on Operator SDK</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/docs/testing-operators/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Scorecard</title>
      <link>/docs/testing-operators/scorecard/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/testing-operators/scorecard/</guid>
      <description>
        
        
        &lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;The scorecard command, part of the operator-sdk, executes tests
on your operator based upon a configuration file and test images.&lt;/p&gt;
&lt;p&gt;Tests are implemented within test images that are configured
and constructed to be executed by scorecard.&lt;/p&gt;
&lt;p&gt;Scorecard assumes it is being executed with access to a configured
Kubernetes cluster.  Each test is executed within a Pod by scorecard,
from which pod logs are aggregated and test results sent to the console.&lt;/p&gt;
&lt;p&gt;Scorecard has built-in basic and OLM tests, and it also provides a
means to execute custom test definitions.&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;
&lt;p&gt;The scorecard tests make no assumptions as to the state of the
operator being tested. Creating operators and custom resources
for an operator are left outside the scope of the scorecard itself.&lt;/p&gt;
&lt;p&gt;Scorecard tests can however create whatever resources they
require if the tests are designed for resource creation.&lt;/p&gt;
&lt;h2 id=&#34;running-the-scorecard&#34;&gt;Running the Scorecard&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;A default set of kustomize files should have been scaffolded by &lt;code&gt;operator-sdk init&lt;/code&gt;.
If that is not the case, run &lt;code&gt;operator-sdk init&lt;/code&gt; as you would have to initialize your project
and copy scaffolded files:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ &lt;span style=&#34;color:#000&#34;&gt;TMP_PROJECT&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;mktemp -d&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&amp;lt;current-project-name&amp;gt;&amp;#34;&lt;/span&gt;
$ mkdir &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$TMP_PROJECT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
$ &lt;span style=&#34;color:#204a87&#34;&gt;pushd&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$TMP_PROJECT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
$ operator-sdk init
$ &lt;span style=&#34;color:#204a87&#34;&gt;popd&lt;/span&gt;
$ cp -r &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$TMP_PROJECT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;/config/scorecard ./config/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The default config generated by this kustomization can be immediately run against your operator.
See the &lt;a href=&#34;#config-file&#34;&gt;config file section&lt;/a&gt; for an explanation of the configuration file format.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;(Re)generate &lt;a href=&#34;/docs/olm-integration/quickstart-bundle&#34;&gt;bundle&lt;/a&gt; manifests and metadata for your Operator.
&lt;code&gt;make bundle&lt;/code&gt; will automatically add scorecard annotations to your bundle&amp;rsquo;s metadata,
which is used by the &lt;code&gt;scorecard&lt;/code&gt; command to run tests.&lt;/li&gt;
&lt;li&gt;Execute the &lt;a href=&#34;/docs/cli/operator-sdk_scorecard/&#34;&gt;&lt;code&gt;scorecard&lt;/code&gt; command&lt;/a&gt;. See the &lt;a href=&#34;#command-args&#34;&gt;command args section&lt;/a&gt;
for an overview of command invocation.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;The scorecard test execution is driven by a configuration file named &lt;code&gt;config.yaml&lt;/code&gt;, generated by &lt;code&gt;make bundle&lt;/code&gt;.  Note that if run &lt;code&gt;make bundle&lt;/code&gt; that any
changes you have made to &lt;code&gt;config.yaml&lt;/code&gt; will be overwritten.  To persist
any changes to &lt;code&gt;config.yaml&lt;/code&gt; you can update the kustomize templates found in the
&lt;code&gt;config/scorecard&lt;/code&gt; directory.
The configuration file is located at the following location within your bundle directory (&lt;code&gt;bundle/&lt;/code&gt; by default):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ tree ./bundle
./bundle
...
└── tests
    └── scorecard
        └── config.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;config-file&#34;&gt;Config File&lt;/h3&gt;
&lt;p&gt;The following YAML spec is an example of the scorecard configuration file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Configuration&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiversion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;scorecard.operatorframework.io/v1alpha3&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;config&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;stages&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;parallel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tests&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;quay.io/operator-framework/scorecard-test&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;latest&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;entrypoint&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- scorecard-test&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- basic-check-spec&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;suite&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;basic&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;test&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;basic-check-spec-test&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;quay.io/operator-framework/scorecard-test&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;latest&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;entrypoint&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- scorecard-test&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- olm-bundle-validation&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;suite&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;olm&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;test&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;olm-bundle-validation-test&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The configuration file defines the tests that scorecard executes. Tests are
grouped into stages for fine-grained control of &lt;a href=&#34;#parallelism&#34;&gt;parallelism&lt;/a&gt;.
The following fields of the scorecard configuration file define the test as
follows:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Config Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;the test container image name that implements a test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;entrypoint&lt;/td&gt;
&lt;td&gt;the command and arguments that are invoked in the test image to execute a test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;labels&lt;/td&gt;
&lt;td&gt;scorecard-defined or custom labels that &lt;a href=&#34;#selecting-tests&#34;&gt;select&lt;/a&gt; which tests to run&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;command-args&#34;&gt;Command Args&lt;/h3&gt;
&lt;p&gt;The scorecard command has the following syntax:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ operator-sdk scorecard &amp;lt;bundle_dir_or_image&amp;gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt;flags&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The scorecard requires a positional argument that holds either the
on-disk path to your operator bundle or the name of a bundle image.  Note
that the scorecard does not run your operator but merely uses
the scorecard configuration within the bundle contents to know which tests
to execute.&lt;/p&gt;
&lt;p&gt;For further information about the flags see the &lt;a href=&#34;/docs/cli/operator-sdk_scorecard/&#34;&gt;CLI documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;parallelism&#34;&gt;Parallelism&lt;/h2&gt;
&lt;p&gt;The configuration file allows operator developers to define separate stages for
their tests. Stages run sequentially in the order they are defined in the
configuration file. A stage contains a list of tests and a configurable
&lt;code&gt;parallel&lt;/code&gt; setting.&lt;/p&gt;
&lt;p&gt;By default (or when a stage explicitly sets &lt;code&gt;parallel&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;), tests in
a stage are run sequentially in the order they are defined in the configuration
file. Running tests one at a time is helpful to guarantee that no two tests
interact and conflict with each other.&lt;/p&gt;
&lt;p&gt;However, if tests are designed to be fully isolated, they can be parallelized.
To run a set of isolated tests in parallel, include them in the same stage and
set &lt;code&gt;parallel&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;. All tests in a parallel stage are executed
simultaneously, and scorecard waits for all of them to finish before proceeding
to the next stage. This can make your tests run much faster.&lt;/p&gt;
&lt;h2 id=&#34;selecting-tests&#34;&gt;Selecting Tests&lt;/h2&gt;
&lt;p&gt;Tests are selected by setting the &lt;code&gt;--selector&lt;/code&gt; CLI flag to
a set of label strings.  If a selector flag is not supplied, then all
the tests within the scorecard configuration file are executed.&lt;/p&gt;
&lt;p&gt;Tests are executed serially, one after the other, with test results
being aggregated by scorecard and written to stdout.&lt;/p&gt;
&lt;p&gt;To select a single test (&lt;code&gt;basic-check-spec-test&lt;/code&gt;) you would enter the
following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ operator-sdk scorecard &amp;lt;bundle_dir_or_image&amp;gt; -o text --selector&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;test&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;basic-check-spec-test
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To select a suite of tests, olm in this case, you would specify
a label that is used by all the OLM tests:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ operator-sdk scorecard &amp;lt;bundle_dir_or_image&amp;gt; -o text --selector&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;suite&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;olm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To select multiple tests, you could specify them as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ operator-sdk scorecard &amp;lt;bundle_dir_or_image&amp;gt; -o text --selector&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;test in (basic-check-spec-test,olm-bundle-validation-test)&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;built-in-tests&#34;&gt;Built-in Tests&lt;/h2&gt;
&lt;p&gt;The scorecard ships with pre-defined tests that are arranged into suites.&lt;/p&gt;
&lt;h3 id=&#34;basic-test-suite&#34;&gt;Basic Test Suite&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Test Name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spec Block Exists&lt;/td&gt;
&lt;td&gt;This test checks the Custom Resource (CRs) created in the cluster to make sure that all CRs have a spec block.&lt;/td&gt;
&lt;td&gt;basic-check-spec-test&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;olm-test-suite&#34;&gt;OLM Test Suite&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Short Name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bundle Validation&lt;/td&gt;
&lt;td&gt;This test validates the bundle manifests found in the bundle that is passed into scorecard.  If the bundle contents contain errors, then the test result output will include the validator log as well as error messages from the validation library.  See this &lt;a href=&#34;https://github.com/operator-framework/operator-registry#manifest-format&#34;&gt;document&lt;/a&gt; for details on bundles.&lt;/td&gt;
&lt;td&gt;olm-bundle-validation-test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provided APIs have validation&lt;/td&gt;
&lt;td&gt;This test verifies that the CRDs for the provided CRs contain a validation section and that there is validation for each spec and status field detected in the CR.&lt;/td&gt;
&lt;td&gt;olm-crds-have-validation-test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Owned CRDs Have Resources Listed&lt;/td&gt;
&lt;td&gt;This test makes sure that the CRDs for each CR provided via the &lt;code&gt;cr-manifest&lt;/code&gt; option have a &lt;code&gt;resources&lt;/code&gt; subsection in the [&lt;code&gt;owned&lt;/code&gt; CRDs section][owned-crds] of the CSV. If the test detects used resources that are not listed in the resources section, it will list them in the suggestions at the end of the test. Users are required to fill out the resources section after initial code generation for this test to pass. For Go-based operators, use ClusterServiceVersion &lt;a href=&#34;/docs/building-operators/golang/references/markers&#34;&gt;API Markers&lt;/a&gt; to add resources.&lt;/td&gt;
&lt;td&gt;olm-crds-have-resources-test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spec Fields With Descriptors&lt;/td&gt;
&lt;td&gt;This test verifies that every field in the Custom Resources&amp;rsquo; spec sections have a corresponding descriptor listed in the CSV.&lt;/td&gt;
&lt;td&gt;olm-spec-descriptors-test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Status Fields With Descriptors&lt;/td&gt;
&lt;td&gt;This test verifies that every field in the Custom Resources&amp;rsquo; status sections have a corresponding descriptor listed in the CSV.&lt;/td&gt;
&lt;td&gt;olm-status-descriptors-test&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;scorecard-output&#34;&gt;Scorecard Output&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;--output&lt;/code&gt; flag specifies the scorecard results output format.&lt;/p&gt;
&lt;h3 id=&#34;json-format&#34;&gt;JSON format&lt;/h3&gt;
&lt;p&gt;See an example of the JSON format produced by a scorecard test:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;apiVersion&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;scorecard.operatorframework.io/v1alpha3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;TestList&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;items&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;apiVersion&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;scorecard.operatorframework.io/v1alpha3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;spec&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;image&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;quay.io/operator-framework/scorecard-test:latest&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;entrypoint&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
          &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;scorecard-test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
          &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;olm-bundle-validation&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;
        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;labels&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
          &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;suite&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;olm&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
          &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;olm-bundle-validation-test&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
      &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;results&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
          &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;olm-bundle-validation&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;time=\&amp;#34;2020-06-10T19:02:49Z\&amp;#34; level=debug msg=\&amp;#34;Found manifests directory\&amp;#34; name=bundle-test\ntime=\&amp;#34;2020-06-10T19:02:49Z\&amp;#34; level=debug msg=\&amp;#34;Found metadata directory\&amp;#34; name=bundle-test\ntime=\&amp;#34;2020-06-10T19:02:49Z\&amp;#34; level=debug msg=\&amp;#34;Getting mediaType info from manifests directory\&amp;#34; name=bundle-test\ntime=\&amp;#34;2020-06-10T19:02:49Z\&amp;#34; level=info msg=\&amp;#34;Found annotations file\&amp;#34; name=bundle-test\ntime=\&amp;#34;2020-06-10T19:02:49Z\&amp;#34; level=info msg=\&amp;#34;Could not find optional dependencies file\&amp;#34; name=bundle-test\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;state&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;pass&amp;#34;&lt;/span&gt;
          &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
      &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;xml-format&#34;&gt;XML format&lt;/h3&gt;
&lt;p&gt;See the example below for the results of a scorecard test formatted in XML. The scorecard tool formats the XML output for XUnit schema compatibility. This format makes it easier for post-processing the test results.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;testsuites&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;scorecard&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;testsuite&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;olm-bundle-validation-test&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;tests=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;skipped=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;failures=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;errors=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;spec.image&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;quay.io/operator-framework/scorecard-test:v1.19.0&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;spec.entrypoint&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;scorecard-test olm-bundle-validation&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;labels.test&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;olm-bundle-validation-test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;testcase&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;olm-bundle-validation&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;time=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;0001-01-01T00:00:00Z&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;
      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;system-out&amp;gt;&lt;/span&gt;time=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;2022-04-12T19:21:52Z&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; level=debug msg=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;Found manifests directory&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; name=bundle-test&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#xA;&lt;/span&gt;time=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;2022-04-12T19:21:52Z&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; level=debug msg=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;Found metadata directory&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; name=bundle-test&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#xA;&lt;/span&gt;time=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;2022-04-12T19:21:52Z&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; level=debug msg=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;Getting mediaType info from manifests directory&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; name=bundle-test&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#xA;&lt;/span&gt;time=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;2022-04-12T19:21:52Z&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; level=debug msg=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;Found annotations file&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; name=bundle-test&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#xA;&lt;/span&gt;time=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;2022-04-12T19:21:52Z&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; level=debug msg=&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt;Could not find optional dependencies file&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#34;&lt;/span&gt; name=bundle-test&lt;span style=&#34;color:#ce5c00&#34;&gt;&amp;amp;#xA;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;/system-out&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;/testcase&amp;gt;&lt;/span&gt;
  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;/testsuite&amp;gt;&lt;/span&gt;
  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&amp;lt;!-- Some suites omitted for readability --&amp;gt;&lt;/span&gt;
&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;lt;/testsuites&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;text-format&#34;&gt;Text format&lt;/h3&gt;
&lt;p&gt;See an example of the text format produced by a scorecard test:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;--------------------------------------------------------------------------------
Image:      quay.io/operator-framework/scorecard-test:latest
Entrypoint: [scorecard-test olm-bundle-validation]
Labels:
	&amp;quot;suite&amp;quot;:&amp;quot;olm&amp;quot;
	&amp;quot;test&amp;quot;:&amp;quot;olm-bundle-validation-test&amp;quot;
Results:
	Name: olm-bundle-validation
	State: pass
	Log:
		time=&amp;quot;2020-07-15T03:19:02Z&amp;quot; level=debug msg=&amp;quot;Found manifests directory&amp;quot; name=bundle-test
		time=&amp;quot;2020-07-15T03:19:02Z&amp;quot; level=debug msg=&amp;quot;Found metadata directory&amp;quot; name=bundle-test
		time=&amp;quot;2020-07-15T03:19:02Z&amp;quot; level=debug msg=&amp;quot;Getting mediaType info from manifests directory&amp;quot; name=bundle-test
		time=&amp;quot;2020-07-15T03:19:02Z&amp;quot; level=info msg=&amp;quot;Found annotations file&amp;quot; name=bundle-test
		time=&amp;quot;2020-07-15T03:19:02Z&amp;quot; level=info msg=&amp;quot;Could not find optional dependencies file&amp;quot; name=bundle-test
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; The output format spec for each test matches the &lt;a href=&#34;https://pkg.go.dev/github.com/operator-framework/api/pkg/apis/scorecard/v1alpha3#Test&#34;&gt;&lt;code&gt;Test&lt;/code&gt;&lt;/a&gt; type layout.&lt;/p&gt;
&lt;h2 id=&#34;exit-status&#34;&gt;Exit Status&lt;/h2&gt;
&lt;p&gt;The scorecard return code is 1 if any of the tests executed did not
pass and 0 if all selected tests pass.&lt;/p&gt;
&lt;h2 id=&#34;extending-the-scorecard-with-custom-tests&#34;&gt;Extending the Scorecard with Custom Tests&lt;/h2&gt;
&lt;p&gt;Scorecard will execute custom tests if they follow these mandated conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tests are implemented within a container image&lt;/li&gt;
&lt;li&gt;tests accept an entrypoint which include a command and arguments&lt;/li&gt;
&lt;li&gt;tests produce v1alpha3 scorecard output in JSON format with no extraneous logging in the test output&lt;/li&gt;
&lt;li&gt;tests can obtain the bundle contents at a shared mount point of /bundle&lt;/li&gt;
&lt;li&gt;tests can access the Kubernetes API using an in-cluster client connection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/09c3aa14625965af9f22f513cd5c891471dbded2/images/custom-scorecard-tests/main.go&#34;&gt;example of a custom test image&lt;/a&gt; written in Go.&lt;/p&gt;
&lt;p&gt;Writing custom tests in other programming languages is possible
if the test image follows the above guidelines.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
