# ToolArgumentValidationContract

> Tracon documentation. Tracon is a .NET package family that adds a control
> plane on Microsoft Agent Framework, published as NuGet packages that run
> inside your own ASP.NET Core application.
>
> Page: https://tracon.dev/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/
> Summary: ToolArgumentValidationContract: Behavior tests for the consumer's own IToolArgumentsValidator, fuzzed against one of the consumer's own tools.

<div class="api-provenance">Namespace Tracon.Testing.Contracts.Tools · Assembly <code>Tracon.Testing.Contracts.Xunit.dll</code></div>

Behavior tests for the consumer's own [IToolArgumentsValidator](/api/tracon.itoolargumentsvalidator/),
fuzzed against one of the consumer's own tools.

```csharp
public abstract class ToolArgumentValidationContract : IAsyncLifetime, IAsyncDisposable
```

<dl class="api-relations"><dt>Inheritance</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object">object</a> ← <a href="/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/">ToolArgumentValidationContract</a></dd><dt>Implements</dt><dd>IAsyncLifetime, <a href="https://learn.microsoft.com/dotnet/api/system.iasyncdisposable">IAsyncDisposable</a></dd><dt>Inherited Members</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a></dd></dl>

## Remarks

[IToolArgumentsValidator](/api/tracon.itoolargumentsvalidator/) promises fail-closed behavior: a
missing required field, a type mismatch, an out-of-range number, or a
pattern violation must be rejected, and a validator that throws must still
end up rejecting the call. Tracon tests its own fail-closed wrapper against
synthetic validators; this contract
tests whether the **consumer's** validator actually implements
the rule, using arguments generated from [ToolArgumentValidationContract.Tool](/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/#Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Tool)'s own
`AIFunctionDeclaration.JsonSchema`.

This contract does not ship a validator and does not require one to
reject or accept an unrecognized extra property either way — Tracon's
stance is that JSON Schema validation, including `additionalProperties`,
stays inside the consumer's own trust boundary. Override
[ToolArgumentValidationContract.ExtraPropertyIsRejected](/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/#Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_ExtraPropertyIsRejected) to state which way [ToolArgumentValidationContract.Validator](/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/#Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Validator)
goes; the one thing this contract will not accept is silence.

A scenario this generator cannot build for [ToolArgumentValidationContract.Tool](/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/#Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Tool)'s schema (no
required property, no numeric bound, no pattern, or a required property
shaped like a nested object) is skipped with an explicit reason rather
than passing silently.

## Constructors

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract__ctor"></a> ToolArgumentValidationContract\(\)

```csharp
protected ToolArgumentValidationContract()
```

## Properties

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_ExtraPropertyIsRejected"></a> ExtraPropertyIsRejected

Whether [ToolArgumentValidationContract.Validator](/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/#Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Validator) is expected to reject an argument set
that carries a property [ToolArgumentValidationContract.Tool](/api/tracon.testing.contracts.tools.toolargumentvalidationcontract/#Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Tool)'s schema never declared.

```csharp
protected virtual bool ExtraPropertyIsRejected { get; }
```

#### Property Value

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Seed"></a> Seed

The seed the argument generator uses. Fixed by default for reproducibility (143.2).

```csharp
protected virtual int Seed { get; }
```

#### Property Value

 [int](https://learn.microsoft.com/dotnet/api/system.int32)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Tool"></a> Tool

The tool whose schema drives the generated arguments.

```csharp
protected AIFunction Tool { get; }
```

#### Property Value

 AIFunction

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Validator"></a> Validator

The consumer's own validator under test.

```csharp
protected IToolArgumentsValidator Validator { get; }
```

#### Property Value

 [IToolArgumentsValidator](/api/tracon.itoolargumentsvalidator/)

## Methods

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_A_pre_cancelled_token_is_honored"></a> A\_pre\_cancelled\_token\_is\_honored\(\)

```csharp
[Fact]
public Task A_pre_cancelled_token_is_honored()
```

#### Returns

 [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_CreateToolAsync"></a> CreateToolAsync\(\)

Creates the tool under test.

```csharp
protected abstract ValueTask<AIFunction> CreateToolAsync()
```

#### Returns

 [ValueTask](https://learn.microsoft.com/dotnet/api/system.threading.tasks.valuetask\-1)<AIFunction\>

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_CreateValidatorAsync"></a> CreateValidatorAsync\(\)

Creates the validator under test.

```csharp
protected abstract ValueTask<IToolArgumentsValidator> CreateValidatorAsync()
```

#### Returns

 [ValueTask](https://learn.microsoft.com/dotnet/api/system.threading.tasks.valuetask\-1)<[IToolArgumentsValidator](/api/tracon.itoolargumentsvalidator/)\>

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_DisposeAsync"></a> DisposeAsync\(\)

```csharp
public ValueTask DisposeAsync()
```

#### Returns

 [ValueTask](https://learn.microsoft.com/dotnet/api/system.threading.tasks.valuetask)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_InitializeAsync"></a> InitializeAsync\(\)

Called immediately after the class has been created, before it is used.

```csharp
public ValueTask InitializeAsync()
```

#### Returns

 [ValueTask](https://learn.microsoft.com/dotnet/api/system.threading.tasks.valuetask)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Missing_required_argument_is_rejected"></a> Missing\_required\_argument\_is\_rejected\(\)

```csharp
[Fact]
public Task Missing_required_argument_is_rejected()
```

#### Returns

 [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Out_of_range_number_is_rejected"></a> Out\_of\_range\_number\_is\_rejected\(\)

```csharp
[Fact]
public Task Out_of_range_number_is_rejected()
```

#### Returns

 [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Pattern_violation_is_rejected"></a> Pattern\_violation\_is\_rejected\(\)

```csharp
[Fact]
public Task Pattern_violation_is_rejected()
```

#### Returns

 [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Throwing_validator_rejects_the_call"></a> Throwing\_validator\_rejects\_the\_call\(\)

```csharp
[Fact]
public Task Throwing_validator_rejects_the_call()
```

#### Returns

 [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Type_mismatch_is_rejected"></a> Type\_mismatch\_is\_rejected\(\)

```csharp
[Fact]
public Task Type_mismatch_is_rejected()
```

#### Returns

 [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### <a id="Tracon_Testing_Contracts_Tools_ToolArgumentValidationContract_Unknown_extra_property_is_handled_deliberately"></a> Unknown\_extra\_property\_is\_handled\_deliberately\(\)

```csharp
[Fact]
public Task Unknown_extra_property_is_handled_deliberately()
```

#### Returns

 [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)
