Frequently asked questions
Seems magical, how does Coyote really work?
I’m glad you asked. See how does it work.
What programming languages does Coyote support?
Coyote currently only supports C#.
Is Coyote only available with Azure?
No, Coyote can run in any Windows or Linux machine, regardless if it is a local machine or a VM on
the cloud.
What type of projects will benefit most from using Coyote?
Projects that have to deal with asynchrony/concurrency or other non-deterministic issues (such as
timeouts, failures and re-orderings).
Will Coyote slow down my production code?
No, Coyote testing works on unmodified code. If you decide to use
the optional Coyote actors API to build your system, then
there is minimal production overhead as Coyote actors were designed to be lightweight (they are
in-memory objects that execute on top of a C# task) and have been battle-tested by several teams
inside Azure.
At what stage of the development lifecycle is it best to start using Coyote?
Ideally at the very beginning. It is better to do testing while developing, not after you are ready
to ship :)
Will using Coyote affect the total budget for a software development project?
It will have minimal impact initially, as developers ramp up on Coyote concepts. In the long run,
our experience with Azure teams suggests that it will help reduce the total budget. Coyote is
designed to add agility so that the development and testing processes move at a faster pace.
How much time will developers need to learn Coyote?
We have been working hard towards making Coyote accessible to all developers, however, we cannot
give a conclusive answer yet. We think that it won’t take long. A junior engineer that recently
joined an Azure team using Coyote said: “being a new developer to the team, one of the first few
things I worked on was Coyote, it was really quick to onboard, writing actual code is simple and
straightforward”. Tell us about your experience!
How much additional effort is needed to test an existing system with Coyote?
Depends on what programming model and concurrency APIs you used for developing your existing system
because, for Coyote testing to work, it needs to understand the
non-determinism in your system. If you write your code using
typical task-based APIs in C#, then most likely you do not need to do anything as Coyote testing
works on unmodified code. In other cases, you would also have to
model additional non-determinism, such as timers and external services. In general, we recommend
using Coyote in early stages of development.
How do Coyote actors compare against other actor frameworks?
Read how are Coyote Actors different from existing Microsoft Actor frameworks.
How is Coyote different from other similar systems out there?
One comparison point for Coyote would be other offerings that help build reliable systems. It would
be difficult to give an exhaustive answer here, but Coyote is quite unique in its combination of
powerful testing and minimal runtime requirements (i.e., it requires the .NET Core only).
Other systems might require a buy-in to a particular distributed runtime or messaging system, or
might not help much in the way of testing custom business logic. You can adapt Coyote to work with
whatever platform you are using today.
How many machines do you need to run a Coyote actor-based program?
A Coyote actor-based program is hosted in a .NET process, so it can easily run on just one machine.
You can also create a distributed Coyote actor-based program by connecting multiple processes, each
running Coyote. You are free to use any distributed host platform as well as any messaging system
that you want.
Can Coyote actors be used with any existing distributed host and communication platform?
Yes, Coyote does not constrain you. Coyote is built on top of the .NET Task Parallel Library, and on
its own only executes in-memory in the scope of a single .NET process. To build a distributed Coyote
program, you are free to use any distributed host and communication mechanism that you like. All you
need to do is host your .NET processes (that execute your Coyote code) using your favorite
distributed system/framework (such as Kubernetes or Azure Service
Fabric) and connect these processes
using your favorite communication/messaging mechanism (such as gRPC, Apache
Kafka or Azure Service
Bus). To help you, there is a sample that
shows how Coyote can be used with Azure Service Bus and
a sample for ASP.NET Core.
Is it meaningful to use Coyote for a program that runs on a single machine only?
Sure, in fact most testing with Coyote is performed on a single machine. Many Coyote users today
build reliable cloud services, and Coyote itself is not service-specific. You can use it to build
and test any kind of asynchronous .NET program that needs to be reliable.
How is Coyote being maintained and what level of support can we expect?
Coyote is currently an open source project on GitHub under the MIT license. Microsoft continues to
invest in Coyote and accepts community contributions as well. Issues can be posted there and will be
resolved in a timely manner.