code: func NewClient() *Client {
  	ctx, env := coordinatorTest.Install(false)
  	datastore.GetTestable(ctx).Consistent(true)
  	env.LogIn()
  	env.AuthState.IdentityGroups = []string{"admin", "all", "auth", "services"}
  
  	env.ModProjectConfig(ctx, "proj-foo", func(pcfg *svcconfig.ProjectConfig) {
  		pcfg.MaxStreamAge = google.NewDuration(time.Hour)
  	})
  	ts := taskqueue.GetTestable(ctx)
  	ts.CreatePullQueue(services.ArchiveQueueName)
  
  	storage := &mem_storage.Storage{}
  	env.Services.ST = func(*coordinator.LogStreamState) (coordinator.SigningStorage, error) {
  		return storageclient{storage}, nil
  	}
  	return &Client{
  		ctx: ctx, env: env,
  
  		logsServ: logs_impl.New(),
  		regServ:  reg_impl.New(),
  		srvServ:  services_impl.New(),
  
  		storage: storage,
  
  		prefixes: map[string]*prefixState{},
  	}
  }
docs: // NewClient generates a new fake Client which can be used as a logs.LogsClient,
  // and can also have its underlying stream data manipulated by the test.
  //
  // Functions taking context.Context will ignore it (i.e. they don't expect
  // anything in the context).
  //
  // This client is attached to an in-memory datastore of its own and the real
  // coordinator services are attached to that in-memory datastore. That means
  // that the Client API SHOULD actually behave identically to the real
  // coordinator (since it's the same code). Additionally, the 'Open' methods on
  // the Client do the full Prefix/Stream registration process, and so should also
  // behave like the real thing.