// ProcessEvent reads, validates and emits a configuration. func (b *configuratorBehavior) ProcessEvent(event cells.Event) error { switch event.Topic() { case ReadConfigurationTopic: // Read configuration filename, ok := event.Payload().GetString(ConfigurationFilenamePayload) if !ok { logger.Errorf("cannot read configuration without filename payload") return nil } logger.Infof("reading configuration from %q", filename) config, err := configuration.ReadFile(filename) if err != nil { return errors.Annotate(err, ErrCannotReadConfiguration, errorMessages) } // If wanted then validate it. if b.validate != nil { err = b.validate(config) if err != nil { return errors.Annotate(err, ErrCannotValidateConfiguration, errorMessages) } } // All done, emit it. pvs := cells.PayloadValues{ ConfigurationPayload: config, } b.ctx.EmitNew(ConfigurationTopic, pvs, event.Scene()) } return nil }
// TestReadFile tests reading a configuration out of a file. func TestReadFile(t *testing.T) { assert := audit.NewTestingAssertion(t, true) tempDir := audit.NewTempDir(assert) defer tempDir.Restore() configFile, err := ioutil.TempFile(tempDir.String(), "configuration") assert.Nil(err) configFileName := configFile.Name() _, err = configFile.WriteString("{config {foo 42}{bar 24}}") assert.Nil(err) configFile.Close() config, err := configuration.ReadFile(configFileName) assert.Nil(err) v, err := config.At("foo").Value() assert.Nil(err) assert.Equal(v, "42") v, err = config.At("bar").Value() assert.Nil(err) assert.Equal(v, "24") _, err = configuration.ReadFile("some-not-existing-configuration-file-due-to-wierd-name") assert.ErrorMatch(err, `.* cannot read configuration file .*`) }