本文整理汇总了Golang中github.com/juju/juju/state/testing.NewStringsWatcherC函数的典型用法代码示例。如果您正苦于以下问题:Golang NewStringsWatcherC函数的具体用法?Golang NewStringsWatcherC怎么用?Golang NewStringsWatcherC使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewStringsWatcherC函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestWatchFilesystemAttachments
func (s *provisionerSuite) TestWatchFilesystemAttachments(c *gc.C) {
s.setupFilesystems(c)
c.Assert(s.resources.Count(), gc.Equals, 0)
args := params.Entities{Entities: []params.Entity{
{"machine-0"},
{s.State.ModelTag().String()},
{"environ-adb650da-b77b-4ee8-9cbb-d57a9a592847"},
{"machine-1"},
{"machine-42"}},
}
result, err := s.api.WatchFilesystemAttachments(args)
c.Assert(err, jc.ErrorIsNil)
sort.Sort(byMachineAndEntity(result.Results[0].Changes))
sort.Sort(byMachineAndEntity(result.Results[1].Changes))
c.Assert(result, jc.DeepEquals, params.MachineStorageIdsWatchResults{
Results: []params.MachineStorageIdsWatchResult{
{
MachineStorageIdsWatcherId: "1",
Changes: []params.MachineStorageId{{
MachineTag: "machine-0",
AttachmentTag: "filesystem-0-0",
}},
},
{
MachineStorageIdsWatcherId: "2",
Changes: []params.MachineStorageId{{
MachineTag: "machine-0",
AttachmentTag: "filesystem-1",
}, {
MachineTag: "machine-0",
AttachmentTag: "filesystem-2",
}, {
MachineTag: "machine-2",
AttachmentTag: "filesystem-3",
}},
},
{Error: apiservertesting.ErrUnauthorized},
{Error: apiservertesting.ErrUnauthorized},
{Error: apiservertesting.ErrUnauthorized},
},
})
// Verify the resources were registered and stop them when done.
c.Assert(s.resources.Count(), gc.Equals, 2)
v0Watcher := s.resources.Get("1")
defer statetesting.AssertStop(c, v0Watcher)
v1Watcher := s.resources.Get("2")
defer statetesting.AssertStop(c, v1Watcher)
// Check that the Watch has consumed the initial events ("returned" in
// the Watch call)
wc := statetesting.NewStringsWatcherC(c, s.State, v0Watcher.(state.StringsWatcher))
wc.AssertNoChange()
wc = statetesting.NewStringsWatcherC(c, s.State, v1Watcher.(state.StringsWatcher))
wc.AssertNoChange()
}
示例2: TestWatchModelMachinesSuccess
func (s *InstancePollerSuite) TestWatchModelMachinesSuccess(c *gc.C) {
// Add a couple of machines.
s.st.SetMachineInfo(c, machineInfo{id: "2"})
s.st.SetMachineInfo(c, machineInfo{id: "1"})
expectedResult := params.StringsWatchResult{
Error: nil,
StringsWatcherId: "1",
Changes: []string{"1", "2"}, // initial event (sorted ids)
}
result, err := s.api.WatchModelMachines()
c.Assert(err, jc.ErrorIsNil)
c.Assert(result, jc.DeepEquals, expectedResult)
// Verify the watcher resource was registered.
c.Assert(s.resources.Count(), gc.Equals, 1)
resource1 := s.resources.Get("1")
defer func() {
if resource1 != nil {
statetesting.AssertStop(c, resource1)
}
}()
// Check that the watcher has consumed the initial event
wc1 := statetesting.NewStringsWatcherC(c, s.st, resource1.(state.StringsWatcher))
wc1.AssertNoChange()
s.st.CheckCallNames(c, "WatchModelMachines")
// Add another watcher to verify events coalescence.
result, err = s.api.WatchModelMachines()
c.Assert(err, jc.ErrorIsNil)
expectedResult.StringsWatcherId = "2"
c.Assert(result, jc.DeepEquals, expectedResult)
s.st.CheckCallNames(c, "WatchModelMachines", "WatchModelMachines")
c.Assert(s.resources.Count(), gc.Equals, 2)
resource2 := s.resources.Get("2")
defer statetesting.AssertStop(c, resource2)
wc2 := statetesting.NewStringsWatcherC(c, s.st, resource2.(state.StringsWatcher))
wc2.AssertNoChange()
// Remove machine 1, check it's reported.
s.st.RemoveMachine(c, "1")
wc1.AssertChangeInSingleEvent("1")
// Make separate changes, check they're combined.
s.st.SetMachineInfo(c, machineInfo{id: "2", life: state.Dying})
s.st.SetMachineInfo(c, machineInfo{id: "3"})
s.st.RemoveMachine(c, "42") // ignored
wc1.AssertChangeInSingleEvent("2", "3")
wc2.AssertChangeInSingleEvent("1", "2", "3")
// Stop the first watcher and assert its changes chan is closed.
c.Assert(resource1.Stop(), jc.ErrorIsNil)
wc1.AssertClosed()
resource1 = nil
}
示例3: TestUnitWatchActionNotifications
func (s *ActionSuite) TestUnitWatchActionNotifications(c *gc.C) {
// get units
unit1, err := s.State.Unit(s.unit.Name())
c.Assert(err, jc.ErrorIsNil)
preventUnitDestroyRemove(c, unit1)
unit2, err := s.State.Unit(s.unit2.Name())
c.Assert(err, jc.ErrorIsNil)
preventUnitDestroyRemove(c, unit2)
// queue some actions before starting the watcher
fa1, err := unit1.AddAction("snapshot", nil)
c.Assert(err, jc.ErrorIsNil)
fa2, err := unit1.AddAction("snapshot", nil)
c.Assert(err, jc.ErrorIsNil)
// set up watcher on first unit
w := unit1.WatchActionNotifications()
defer statetesting.AssertStop(c, w)
wc := statetesting.NewStringsWatcherC(c, s.State, w)
// make sure the previously pending actions are sent on the watcher
expect := expectActionIds(fa1, fa2)
wc.AssertChange(expect...)
wc.AssertNoChange()
// add watcher on unit2
w2 := unit2.WatchActionNotifications()
defer statetesting.AssertStop(c, w2)
wc2 := statetesting.NewStringsWatcherC(c, s.State, w2)
wc2.AssertChange()
wc2.AssertNoChange()
// add action on unit2 and makes sure unit1 watcher doesn't trigger
// and unit2 watcher does
fa3, err := unit2.AddAction("snapshot", nil)
c.Assert(err, jc.ErrorIsNil)
wc.AssertNoChange()
expect2 := expectActionIds(fa3)
wc2.AssertChange(expect2...)
wc2.AssertNoChange()
// add a couple actions on unit1 and make sure watcher sees events
fa4, err := unit1.AddAction("snapshot", nil)
c.Assert(err, jc.ErrorIsNil)
fa5, err := unit1.AddAction("snapshot", nil)
c.Assert(err, jc.ErrorIsNil)
expect = expectActionIds(fa4, fa5)
wc.AssertChange(expect...)
wc.AssertNoChange()
}
示例4: TestWatchIPAddresses
func (s *AddresserSuite) TestWatchIPAddresses(c *gc.C) {
c.Assert(s.resources.Count(), gc.Equals, 0)
s.st.addIPAddressWatcher("0.1.2.3", "0.1.2.4", "0.1.2.7")
result, err := s.api.WatchIPAddresses()
c.Assert(err, jc.ErrorIsNil)
c.Assert(result, gc.DeepEquals, params.EntitiesWatchResult{
EntitiesWatcherId: "1",
Changes: []string{
"ipaddress-00000000-1111-2222-3333-0123456789ab",
"ipaddress-00000000-1111-2222-4444-0123456789ab",
"ipaddress-00000000-1111-2222-7777-0123456789ab",
},
Error: nil,
})
// Verify the resource was registered and stop when done.
c.Assert(s.resources.Count(), gc.Equals, 1)
resource := s.resources.Get("1")
defer statetesting.AssertStop(c, resource)
// Check that the Watch has consumed the initial event ("returned" in
// the Watch call)
wc := statetesting.NewStringsWatcherC(c, s.st, resource.(state.StringsWatcher))
wc.AssertNoChange()
}
示例5: TestWatchUnits
func (s *deployerSuite) TestWatchUnits(c *gc.C) {
c.Assert(s.resources.Count(), gc.Equals, 0)
args := params.Entities{Entities: []params.Entity{
{Tag: "machine-1"},
{Tag: "machine-0"},
{Tag: "machine-42"},
}}
result, err := s.deployer.WatchUnits(args)
c.Assert(err, jc.ErrorIsNil)
sort.Strings(result.Results[0].Changes)
c.Assert(result, gc.DeepEquals, params.StringsWatchResults{
Results: []params.StringsWatchResult{
{Changes: []string{"logging/0", "mysql/0"}, StringsWatcherId: "1"},
{Error: apiservertesting.ErrUnauthorized},
{Error: apiservertesting.ErrUnauthorized},
},
})
// Verify the resource was registered and stop when done
c.Assert(s.resources.Count(), gc.Equals, 1)
c.Assert(result.Results[0].StringsWatcherId, gc.Equals, "1")
resource := s.resources.Get("1")
defer statetesting.AssertStop(c, resource)
// Check that the Watch has consumed the initial event ("returned" in
// the Watch call)
wc := statetesting.NewStringsWatcherC(c, s.State, resource.(state.StringsWatcher))
wc.AssertNoChange()
}
示例6: TestWatchRelations
func (s *serviceSuite) TestWatchRelations(c *gc.C) {
w, err := s.apiService.WatchRelations()
c.Assert(err, jc.ErrorIsNil)
defer statetesting.AssertStop(c, w)
wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
// Initial event.
wc.AssertChange()
wc.AssertNoChange()
// Change something other than the lifecycle and make sure it's
// not detected.
err = s.wordpressService.SetExposed()
c.Assert(err, jc.ErrorIsNil)
wc.AssertNoChange()
// Add another service and relate it to wordpress,
// check it's detected.
s.addMachineServiceCharmAndUnit(c, "mysql")
rel := s.addRelation(c, "wordpress", "mysql")
wc.AssertChange(rel.String())
// Destroy the relation and check it's detected.
err = rel.Destroy()
c.Assert(err, jc.ErrorIsNil)
wc.AssertChange(rel.String())
wc.AssertNoChange()
statetesting.AssertStop(c, w)
wc.AssertClosed()
}
示例7: TestStringsWatcherStopsWithPendingSend
func (s *watcherSuite) TestStringsWatcherStopsWithPendingSend(c *gc.C) {
// Call the Deployer facade's WatchUnits for machine-0.
var results params.StringsWatchResults
args := params.Entities{Entities: []params.Entity{{Tag: s.rawMachine.Tag().String()}}}
err := s.stateAPI.Call("Deployer", "", "WatchUnits", args, &results)
c.Assert(err, gc.IsNil)
c.Assert(results.Results, gc.HasLen, 1)
result := results.Results[0]
c.Assert(result.Error, gc.IsNil)
// Start a StringsWatcher and check the initial event.
w := watcher.NewStringsWatcher(s.stateAPI, result)
wc := statetesting.NewStringsWatcherC(c, s.State, w)
// Create a service, deploy a unit of it on the machine.
mysql := s.AddTestingService(c, "mysql", s.AddTestingCharm(c, "mysql"))
principal, err := mysql.AddUnit()
c.Assert(err, gc.IsNil)
err = principal.AssignToMachine(s.rawMachine)
c.Assert(err, gc.IsNil)
// Ensure the initial event is delivered. Then test the watcher
// can be stopped cleanly without reading the pending change.
s.BackingState.StartSync()
statetesting.AssertCanStopWhenSending(c, w)
wc.AssertClosed()
}
示例8: TestWatchEnvironMachines
func (s *withoutStateServerSuite) TestWatchEnvironMachines(c *gc.C) {
c.Assert(s.resources.Count(), gc.Equals, 0)
got, err := s.provisioner.WatchEnvironMachines()
c.Assert(err, gc.IsNil)
want := params.StringsWatchResult{
StringsWatcherId: "1",
Changes: []string{"0", "1", "2", "3", "4"},
}
c.Assert(got.StringsWatcherId, gc.Equals, want.StringsWatcherId)
c.Assert(got.Changes, jc.SameContents, want.Changes)
// Verify the resources were registered and stop them when done.
c.Assert(s.resources.Count(), gc.Equals, 1)
resource := s.resources.Get("1")
defer statetesting.AssertStop(c, resource)
// Check that the Watch has consumed the initial event ("returned"
// in the Watch call)
wc := statetesting.NewStringsWatcherC(c, s.State, resource.(state.StringsWatcher))
wc.AssertNoChange()
// Make sure WatchEnvironMachines fails with a machine agent login.
anAuthorizer := s.authorizer
anAuthorizer.MachineAgent = true
anAuthorizer.EnvironManager = false
aProvisioner, err := provisioner.NewProvisionerAPI(s.State, s.resources, anAuthorizer)
c.Assert(err, gc.IsNil)
result, err := aProvisioner.WatchEnvironMachines()
c.Assert(err, gc.ErrorMatches, "permission denied")
c.Assert(result, gc.DeepEquals, params.StringsWatchResult{})
}
示例9: testWatchModelMachines
func (s *firewallerBaseSuite) testWatchModelMachines(
c *gc.C,
facade interface {
WatchModelMachines() (params.StringsWatchResult, error)
},
) {
c.Assert(s.resources.Count(), gc.Equals, 0)
got, err := facade.WatchModelMachines()
c.Assert(err, jc.ErrorIsNil)
want := params.StringsWatchResult{
StringsWatcherId: "1",
Changes: []string{"0", "1", "2"},
}
c.Assert(got.StringsWatcherId, gc.Equals, want.StringsWatcherId)
c.Assert(got.Changes, jc.SameContents, want.Changes)
// Verify the resources were registered and stop them when done.
c.Assert(s.resources.Count(), gc.Equals, 1)
resource := s.resources.Get("1")
defer statetesting.AssertStop(c, resource)
// Check that the Watch has consumed the initial event ("returned"
// in the Watch call)
wc := statetesting.NewStringsWatcherC(c, s.State, resource.(state.StringsWatcher))
wc.AssertNoChange()
}
示例10: TestWatchMachineVolumeAttachments
func (s *VolumeStateSuite) TestWatchMachineVolumeAttachments(c *gc.C) {
service := s.setupMixedScopeStorageService(c, "block")
addUnit := func() {
u, err := service.AddUnit()
c.Assert(err, jc.ErrorIsNil)
err = s.State.AssignUnit(u, state.AssignCleanEmpty)
c.Assert(err, jc.ErrorIsNil)
}
addUnit()
w := s.State.WatchMachineVolumeAttachments(names.NewMachineTag("0"))
defer testing.AssertStop(c, w)
wc := testing.NewStringsWatcherC(c, s.State, w)
wc.AssertChangeInSingleEvent("0:0", "0:0/1", "0:0/2") // initial
wc.AssertNoChange()
addUnit()
// no change, since we're only interested in the one machine.
wc.AssertNoChange()
err := s.State.DetachVolume(names.NewMachineTag("0"), names.NewVolumeTag("0"))
c.Assert(err, jc.ErrorIsNil)
wc.AssertChangeInSingleEvent("0:0") // dying
wc.AssertNoChange()
err = s.State.RemoveVolumeAttachment(names.NewMachineTag("0"), names.NewVolumeTag("0"))
c.Assert(err, jc.ErrorIsNil)
wc.AssertChangeInSingleEvent("0:0") // removed
wc.AssertNoChange()
// TODO(axw) respond to changes to the same machine when we support
// dynamic storage and/or placement.
}
示例11: TestWatchEnvironVolumeAttachments
func (s *VolumeStateSuite) TestWatchEnvironVolumeAttachments(c *gc.C) {
service := s.setupMixedScopeStorageService(c, "block")
addUnit := func() {
u, err := service.AddUnit()
c.Assert(err, jc.ErrorIsNil)
err = s.State.AssignUnit(u, state.AssignCleanEmpty)
c.Assert(err, jc.ErrorIsNil)
}
addUnit()
w := s.State.WatchEnvironVolumeAttachments()
defer testing.AssertStop(c, w)
wc := testing.NewStringsWatcherC(c, s.State, w)
wc.AssertChangeInSingleEvent("0:0") // initial
wc.AssertNoChange()
addUnit()
wc.AssertChangeInSingleEvent("1:3")
wc.AssertNoChange()
err := s.State.DetachVolume(names.NewMachineTag("0"), names.NewVolumeTag("0"))
c.Assert(err, jc.ErrorIsNil)
wc.AssertChangeInSingleEvent("0:0") // dying
wc.AssertNoChange()
err = s.State.RemoveVolumeAttachment(names.NewMachineTag("0"), names.NewVolumeTag("0"))
c.Assert(err, jc.ErrorIsNil)
wc.AssertChangeInSingleEvent("0:0") // removed
wc.AssertNoChange()
}
示例12: TestWatchActionNotifications
func (s *unitSuite) TestWatchActionNotifications(c *gc.C) {
w, err := s.apiUnit.WatchActionNotifications()
c.Assert(err, jc.ErrorIsNil)
defer statetesting.AssertStop(c, w)
wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
// Initial event.
wc.AssertChange()
// Add a couple of actions and make sure the changes are detected.
action, err := s.wordpressUnit.AddAction("fakeaction", map[string]interface{}{
"outfile": "foo.txt",
})
c.Assert(err, jc.ErrorIsNil)
wc.AssertChange(action.Id())
action, err = s.wordpressUnit.AddAction("fakeaction", map[string]interface{}{
"outfile": "foo.bz2",
"compression": map[string]interface{}{
"kind": "bzip",
"quality": float64(5.0),
},
})
c.Assert(err, jc.ErrorIsNil)
wc.AssertChange(action.Id())
statetesting.AssertStop(c, w)
wc.AssertClosed()
}
示例13: TestWatchEnvironMachines
func (s *provisionerSuite) TestWatchEnvironMachines(c *gc.C) {
w, err := s.provisioner.WatchEnvironMachines()
c.Assert(err, gc.IsNil)
defer statetesting.AssertStop(c, w)
wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
// Initial event.
wc.AssertChange(s.machine.Id())
// Add another 2 machines make sure they are detected.
otherMachine, err := s.State.AddMachine("quantal", state.JobHostUnits)
c.Assert(err, gc.IsNil)
otherMachine, err = s.State.AddMachine("quantal", state.JobHostUnits)
c.Assert(err, gc.IsNil)
wc.AssertChange("1", "2")
// Change the lifecycle of last machine.
err = otherMachine.EnsureDead()
c.Assert(err, gc.IsNil)
wc.AssertChange("2")
// Add a container and make sure it's not detected.
template := state.MachineTemplate{
Series: "quantal",
Jobs: []state.MachineJob{state.JobHostUnits},
}
_, err = s.State.AddMachineInsideMachine(template, s.machine.Id(), instance.LXC)
c.Assert(err, gc.IsNil)
wc.AssertNoChange()
statetesting.AssertStop(c, w)
wc.AssertClosed()
}
示例14: TestWatchPorts
func (s *PortsDocSuite) TestWatchPorts(c *gc.C) {
w := s.State.WatchOpenedPorts()
c.Assert(w, gc.NotNil)
defer statetesting.AssertStop(c, w)
wc := statetesting.NewStringsWatcherC(c, s.State, w)
wc.AssertChange()
wc.AssertNoChange()
portRange := state.PortRange{
FromPort: 100,
ToPort: 200,
UnitName: s.unit1.Name(),
Protocol: "TCP",
}
globalKey := state.PortsGlobalKey(s.machine.Id(), network.DefaultPublic)
err := s.ports.OpenPorts(portRange)
c.Assert(err, gc.IsNil)
wc.AssertChange(globalKey)
err = s.ports.Refresh()
c.Assert(err, gc.IsNil)
err = s.ports.ClosePorts(portRange)
c.Assert(err, gc.IsNil)
wc.AssertChange(globalKey)
}
示例15: TestWatchMachineFilesystemAttachments
func (s *FilesystemStateSuite) TestWatchMachineFilesystemAttachments(c *gc.C) {
service := s.setupMixedScopeStorageService(c, "filesystem")
addUnit := func() {
u, err := service.AddUnit()
c.Assert(err, jc.ErrorIsNil)
err = s.State.AssignUnit(u, state.AssignCleanEmpty)
c.Assert(err, jc.ErrorIsNil)
}
addUnit()
w := s.State.WatchMachineFilesystemAttachments(names.NewMachineTag("0"))
defer testing.AssertStop(c, w)
wc := testing.NewStringsWatcherC(c, s.State, w)
wc.AssertChangeInSingleEvent("0:0", "0:0/1", "0:0/2") // initial
wc.AssertNoChange()
addUnit()
// no change, since we're only interested in the one machine.
wc.AssertNoChange()
// TODO(axw) respond to changes to the same machine when we support
// dynamic storage and/or placement.
// TODO(axw) respond to Dying/Dead when we have
// the means to progress Filesystem lifecycle.
}