<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 `Source` to be checked for correctness. This field must not be set when the resource name refers to a `Ruleset`.
    &quot;files&quot;: [ # `File` set constituting the `Source` bundle.
      { # `File` containing source content.
        &quot;content&quot;: &quot;A String&quot;, # 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;, # 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. # 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); } The JSON representation for `Empty` is empty JSON object `{}`. # 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 JSON representation for `Empty` is empty JSON object `{}`. # 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>