<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, 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. # 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>