<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="firebaserules_v1.html">Firebase Rules API</a> . <a href="firebaserules_v1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="firebaserules_v1.projects.releases.html">releases()</a></code>
</p>
<p class="firstline">Returns the releases Resource.</p>

<p class="toc_element">
  <code><a href="firebaserules_v1.projects.rulesets.html">rulesets()</a></code>
</p>
<p class="firstline">Returns the rulesets Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#test">test(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Test `Source` for syntactic and semantic correctness. Issues present, if any, will be returned to the caller with a description, severity, and source location. The test method may be executed with `Source` or a `Ruleset` name. Passing `Source` is useful for unit testing new rules. Passing a `Ruleset` name is useful for regression testing an existing rule. The following is an example of `Source` that permits users to upload images to a bucket bearing their user id and matching the correct metadata: _*Example*_ // Users are allowed to subscribe and unsubscribe to the blog. service firebase.storage { match /users/{userId}/images/{imageName} { allow write: if userId == request.auth.uid && (imageName.matches('*.png$') || imageName.matches('*.jpg$')) && resource.mimeType.matches('^image/') } }</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="test">test(name, body=None, x__xgafv=None)</code>
  <pre>Test `Source` for syntactic and semantic correctness. Issues present, if any, will be returned to the caller with a description, severity, and source location. The test method may be executed with `Source` or a `Ruleset` name. Passing `Source` is useful for unit testing new rules. Passing a `Ruleset` name is useful for regression testing an existing rule. The following is an example of `Source` that permits users to upload images to a bucket bearing their user id and matching the correct metadata: _*Example*_ // Users are allowed to subscribe and unsubscribe to the blog. service firebase.storage { match /users/{userId}/images/{imageName} { allow write: if userId == request.auth.uid &amp;&amp; (imageName.matches(&#x27;*.png$&#x27;) || imageName.matches(&#x27;*.jpg$&#x27;)) &amp;&amp; resource.mimeType.matches(&#x27;^image/&#x27;) } }

Args:
  name: string, Required. Tests may either provide `source` or a `Ruleset` resource name. For tests against `source`, the resource name must refer to the project: Format: `projects/{project_id}` For tests against a `Ruleset`, this must be the `Ruleset` resource name: Format: `projects/{project_id}/rulesets/{ruleset_id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request for FirebaseRulesService.TestRuleset.
  &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # Optional. Optional `Source` to be checked for correctness. This field must not be set when the resource name refers to a `Ruleset`.
    &quot;files&quot;: [ # Required. `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # Required. Textual Content.
        &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
        &quot;name&quot;: &quot;A String&quot;, # Required. File name.
      },
    ],
  },
  &quot;testSuite&quot;: { # `TestSuite` is a collection of `TestCase` instances that validate the logical correctness of a `Ruleset`. The `TestSuite` may be referenced in-line within a `TestRuleset` invocation or as part of a `Release` object as a pre-release check. # Required. The tests to execute against the `Source`. When `Source` is provided inline, the test cases will only be run if the `Source` is syntactically and semantically valid. Inline `TestSuite` to run.
    &quot;testCases&quot;: [ # Collection of test cases associated with the `TestSuite`.
      { # `TestCase` messages provide the request context and an expectation as to whether the given context will be allowed or denied. Test cases may specify the `request`, `resource`, and `function_mocks` to mock a function call to a service-provided function. The `request` object represents context present at request-time. The `resource` is the value of the target resource as it appears in persistent storage before the request is executed.
        &quot;expectation&quot;: &quot;A String&quot;, # Test expectation.
        &quot;expressionReportLevel&quot;: &quot;A String&quot;, # Specifies what should be included in the response.
        &quot;functionMocks&quot;: [ # Optional function mocks for service-defined functions. If not set, any service defined function is expected to return an error, which may or may not influence the test outcome.
          { # Mock function definition. Mocks must refer to a function declared by the target service. The type of the function args and result will be inferred at test time. If either the arg or result values are not compatible with function type declaration, the request will be considered invalid. More than one `FunctionMock` may be provided for a given function name so long as the `Arg` matchers are distinct. There may be only one function for a given overload where all `Arg` values are `Arg.any_value`.
            &quot;args&quot;: [ # The list of `Arg` values to match. The order in which the arguments are provided is the order in which they must appear in the function invocation.
              { # Arg matchers for the mock function.
                &quot;anyValue&quot;: { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } # Argument matches any value provided.
                },
                &quot;exactValue&quot;: &quot;&quot;, # Argument exactly matches value provided.
              },
            ],
            &quot;function&quot;: &quot;A String&quot;, # The name of the function. The function name must match one provided by a service declaration.
            &quot;result&quot;: { # Possible result values from the function mock invocation. # The mock result of the function call.
              &quot;undefined&quot;: { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } # The result is undefined, meaning the result could not be computed.
              },
              &quot;value&quot;: &quot;&quot;, # The result is an actual value. The type of the value must match that of the type declared by the service.
            },
          },
        ],
        &quot;pathEncoding&quot;: &quot;A String&quot;, # Specifies whether paths (such as request.path) are encoded and how.
        &quot;request&quot;: &quot;&quot;, # Request context. The exact format of the request context is service-dependent. See the appropriate service documentation for information about the supported fields and types on the request. Minimally, all services support the following fields and types: Request field | Type ---------------|----------------- auth.uid | `string` auth.token | `map` headers | `map` method | `string` params | `map` path | `string` time | `google.protobuf.Timestamp` If the request value is not well-formed for the service, the request will be rejected as an invalid argument.
        &quot;resource&quot;: &quot;&quot;, # Optional resource value as it appears in persistent storage before the request is fulfilled. The resource type depends on the `request.path` value.
      },
    ],
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for FirebaseRulesService.TestRuleset.
  &quot;issues&quot;: [ # Syntactic and semantic `Source` issues of varying severity. Issues of `ERROR` severity will prevent tests from executing.
    { # Issues include warnings, errors, and deprecation notices.
      &quot;description&quot;: &quot;A String&quot;, # Short error description.
      &quot;severity&quot;: &quot;A String&quot;, # The severity of the issue.
      &quot;sourcePosition&quot;: { # Position in the `Source` content including its line, column number, and an index of the `File` in the `Source` message. Used for debug purposes. # Position of the issue in the `Source`.
        &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
        &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
        &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
        &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
        &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
      },
    },
  ],
  &quot;testResults&quot;: [ # The set of test results given the test cases in the `TestSuite`. The results will appear in the same order as the test cases appear in the `TestSuite`.
    { # Test result message containing the state of the test as well as a description and source position for test failures.
      &quot;debugMessages&quot;: [ # Debug messages related to test execution issues encountered during evaluation. Debug messages may be related to too many or too few invocations of function mocks or to runtime errors that occur during evaluation. For example: ```Unable to read variable [name: &quot;resource&quot;]```
        &quot;A String&quot;,
      ],
      &quot;errorPosition&quot;: { # Position in the `Source` content including its line, column number, and an index of the `File` in the `Source` message. Used for debug purposes. # Position in the `Source` or `Ruleset` where the principle runtime error occurs. Evaluation of an expression may result in an error. Rules are deny by default, so a `DENY` expectation when an error is generated is valid. When there is a `DENY` with an error, the `SourcePosition` is returned. E.g. `error_position { line: 19 column: 37 }`
        &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
        &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
        &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
        &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
        &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
      },
      &quot;expressionReports&quot;: [ # The mapping from expression in the ruleset AST to the values they were evaluated to. Partially-nested to mirror AST structure. Note that this field is actually tracking expressions and not permission statements in contrast to the &quot;visited_expressions&quot; field above. Literal expressions are omitted.
        { # Describes where in a file an expression is found and what it was evaluated to over the course of its use.
          &quot;children&quot;: [ # Subexpressions
            # Object with schema name: ExpressionReport
          ],
          &quot;sourcePosition&quot;: { # Position in the `Source` content including its line, column number, and an index of the `File` in the `Source` message. Used for debug purposes. # Position of expression in original rules source.
            &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
            &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
            &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
            &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
            &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
          },
          &quot;values&quot;: [ # Values that this expression evaluated to when encountered.
            { # Tuple for how many times an Expression was evaluated to a particular ExpressionValue.
              &quot;count&quot;: 42, # The amount of times that expression returned.
              &quot;value&quot;: &quot;&quot;, # The return value of the expression
            },
          ],
        },
      ],
      &quot;functionCalls&quot;: [ # The set of function calls made to service-defined methods. Function calls are included in the order in which they are encountered during evaluation, are provided for both mocked and unmocked functions, and included on the response regardless of the test `state`.
        { # Represents a service-defined function call that was invoked during test execution.
          &quot;args&quot;: [ # The arguments that were provided to the function.
            &quot;&quot;,
          ],
          &quot;function&quot;: &quot;A String&quot;, # Name of the function invoked.
        },
      ],
      &quot;state&quot;: &quot;A String&quot;, # State of the test.
      &quot;visitedExpressions&quot;: [ # The set of visited permission expressions for a given test. This returns the positions and evaluation results of all visited permission expressions which were relevant to the test case, e.g. ``` match /path { allow read if: } ``` For a detailed report of the intermediate evaluation states, see the `expression_reports` field
        { # Store the position and access outcome for an expression visited in rules.
          &quot;sourcePosition&quot;: { # Position in the `Source` content including its line, column number, and an index of the `File` in the `Source` message. Used for debug purposes. # Position in the `Source` or `Ruleset` where an expression was visited.
            &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
            &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
            &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
            &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
            &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
          },
          &quot;value&quot;: &quot;&quot;, # The evaluated value for the visited expression, e.g. true/false
        },
      ],
    },
  ],
}</pre>
</div>

</body></html>