func startBridge() (map[string]reporter.StatusReporter, error) {
	appReporter := reporter.New()

	commands := make(chan bridge.Command)
	events := make(chan iotf.Event)

	deviceType := "LRSC"
	iotfManager, err := iotf.NewIoTFManager(os.Getenv("VCAP_SERVICES"), commands, events, deviceType)
	if err != nil {
		appReporter.Report("IoTF Manager:", err.Error())
		return nil, err
	}

	if err := setupLrscClient(); err != nil {
		return nil, err
	}

	reporters := make(map[string]reporter.StatusReporter)
	reporters["app"] = appReporter
	reporters["lrsc"] = lrscClient.StatusReporter
	reporters["iotf"] = iotfManager.StatusReporter()

	go runConnectionLoop("LRSC client", &lrscClient)
	go runConnectionLoop("IoTF client", iotfManager)

	go func() {
		for command := range commands {
			lrscClient.sendCommand(command)
			logger.Debug("Received command message: %v", command)
		}
	}()

	go func() {
		for {
			message := <-lrscClient.inbound
			event := iotf.Event{Device: message.DeviceGuid, Payload: message.Payload}
			events <- event
		}
	}()

	return reporters, nil
}
func setupLrscClient() error {
	lrscClient.StatusReporter = reporter.New()
	dialerConfig := dialerConfig{
		host: os.Getenv("LRSC_HOST"),
		port: os.Getenv("LRSC_PORT"),
		cert: os.Getenv("LRSC_CLIENT_CERT"),
		key:  os.Getenv("LRSC_CLIENT_KEY"),
	}
	dialer, err := createTlsDialer(dialerConfig, &lrscClient.StatusReporter)
	if err != nil {
		logger.Error("failed to create dialer: %v", err)
		lrscClient.Report("CONNECTION", err.Error())
		return err
	}

	lrscClient.dialer = dialer
	lrscClient.err = make(chan error)
	lrscClient.inbound = make(chan lrscMessage, 100)

	return nil
}
					count += 1
					return "", errors.New("EOF")
				} else {
					return "{}\n", nil
				}
			},
			writeFunc: func(message string) error {
				if message == "JSON_000" {
					connectionAttempts += 1
				}
				return nil
			}}

		testDialer := &testDialer{conn: mockConn}
		lrscClient := &lrscConnection{dialer: testDialer}
		lrscClient.StatusReporter = reporter.New()
		lrscClient.inbound = make(chan lrscMessage)
		go runConnectionLoop("LRSC Client", lrscClient)

		messages := lrscClient.inbound
		<-messages
		Expect(connectionAttempts).To(Equal(2))
	})

	It("can receive a message", func() {
		mockConn := &mockConnection{
			readFunc: func() (string, error) {
				return `{"deveui": "id", "pdu": "data"}` + "\n", nil
			},
			writeFunc: func(string) error {
				return nil
func newIoTFBroker(credentials *Credentials, commands chan<- bridge.Command, errChan chan<- error, deviceType string, clientFactory clientFactory) *iotfBroker {
	reporter := reporter.New()
	return &iotfBroker{commands: commands, StatusReporter: reporter, deviceType: deviceType, clientFactory: clientFactory, clientId: uuid.New()}
}