Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit de3874e

Browse files
authored
Merge pull request #330 from kotl/master
Add bi-directional (stream + get/set) support and refactoring of the internal classes
2 parents 96eab42 + a7bf160 commit de3874e

24 files changed

+272
-499
lines changed

Diff for: contrib/src/modem/command.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef MODEM_COMMAND_H
22
#define MODEM_COMMAND_H
33

4-
#include "Firebase.h"
4+
#include "FirebaseArduino.h"
55
#include "modem/output-stream.h"
66
#include "modem/input-stream.h"
77

@@ -10,19 +10,19 @@ namespace modem {
1010

1111
class Command {
1212
public:
13-
Command(Firebase* fbase) : fbase_(fbase) {}
13+
Command(FirebaseArduino* fbase) : fbase_(fbase) {}
1414

1515
// Execute command, reading any additional data needed from stream.
1616
// Return false if execution failed.
1717
virtual bool execute(const String& command,
1818
InputStream* in, OutputStream* out) = 0;
1919
protected:
20-
Firebase& fbase() {
20+
FirebaseArduino& fbase() {
2121
return *fbase_;
2222
}
2323

2424
private:
25-
Firebase* fbase_;
25+
FirebaseArduino* fbase_;
2626
};
2727

2828
} // modem

Diff for: contrib/src/modem/db/DatabaseProtocol.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void DatabaseProtocol::Execute(const String& command_name, InputStream* in,
4242
}
4343

4444
std::unique_ptr<Command> DatabaseProtocol::CreateCommand(const String& text,
45-
Firebase* fbase) {
45+
FirebaseArduino* fbase) {
4646
std::unique_ptr<Command> command;
4747
if (text == "GET") {
4848
command.reset(new GetCommand(fbase));

Diff for: contrib/src/modem/db/DatabaseProtocol.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ class DatabaseProtocol : public SerialProtocol {
1313
const std::vector<String>& commands() const override;
1414
void Execute(const String& command, InputStream* in, OutputStream* out) override;
1515
private:
16-
std::unique_ptr<Command> CreateCommand(const String& text, Firebase* fbase);
16+
std::unique_ptr<Command> CreateCommand(const String& text, FirebaseArduino* fbase);
1717

18-
std::unique_ptr<Firebase> fbase_;
18+
std::unique_ptr<FirebaseArduino> fbase_;
1919
};
2020

2121

Diff for: contrib/src/modem/db/begin-command.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@ bool BeginCommand::execute(const String& command,
3333
return false;
3434
}
3535

36-
new_firebase_.reset(new Firebase(host.c_str(), auth.c_str()));
36+
new_firebase_.reset(new FirebaseArduino());
37+
new_firebase_.get()->begin(host.c_str(), auth.c_str());
3738

3839
out->println("+OK");
3940
return true;
4041
}
4142

42-
std::unique_ptr<Firebase> BeginCommand::firebase() {
43+
std::unique_ptr<FirebaseArduino> BeginCommand::firebase() {
4344
return std::move(new_firebase_);
4445
}
4546

Diff for: contrib/src/modem/db/commands.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef MODEM_DB_COMMANDS_H
22
#define MODEM_DB_COMMANDS_H
33

4-
#include "Firebase.h"
4+
#include "FirebaseArduino.h"
55
#include "modem/command.h"
66
#include "modem/output-stream.h"
77
#include "modem/input-stream.h"
@@ -11,28 +11,28 @@ namespace modem {
1111

1212
class GetCommand : public Command {
1313
public:
14-
GetCommand(Firebase* fbase) : Command(fbase) {}
14+
GetCommand(FirebaseArduino* fbase) : Command(fbase) {}
1515

1616
bool execute(const String& command, InputStream* in, OutputStream* out);
1717
};
1818

1919
class SetCommand : public Command {
2020
public:
21-
SetCommand(Firebase* fbase) : Command(fbase) {}
21+
SetCommand(FirebaseArduino* fbase) : Command(fbase) {}
2222

2323
bool execute(const String& command, InputStream* in, OutputStream* out);
2424
};
2525

2626
class RemoveCommand : public Command {
2727
public:
28-
RemoveCommand(Firebase* fbase) : Command(fbase) {}
28+
RemoveCommand(FirebaseArduino* fbase) : Command(fbase) {}
2929

3030
bool execute(const String& command, InputStream* in, OutputStream* out);
3131
};
3232

3333
class PushCommand : public Command {
3434
public:
35-
PushCommand(Firebase* fbase) : Command(fbase) {}
35+
PushCommand(FirebaseArduino* fbase) : Command(fbase) {}
3636

3737
bool execute(const String& command, InputStream* in, OutputStream* out);
3838
};
@@ -44,15 +44,15 @@ class BeginCommand : public Command {
4444
bool execute(const String& command, InputStream* in, OutputStream* out);
4545

4646
// This can only be called once.
47-
std::unique_ptr<Firebase> firebase();
47+
std::unique_ptr<FirebaseArduino> firebase();
4848

4949
private:
50-
std::unique_ptr<Firebase> new_firebase_;
50+
std::unique_ptr<FirebaseArduino> new_firebase_;
5151
};
5252

5353
class StreamCommand : public Command {
5454
public:
55-
StreamCommand(Firebase* fbase) : Command(fbase) {}
55+
StreamCommand(FirebaseArduino* fbase) : Command(fbase) {}
5656

5757
bool execute(const String& command, InputStream* in, OutputStream* out);
5858
};

Diff for: contrib/src/modem/db/get-command.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,14 @@ bool GetCommand::execute(const String& command,
1313
return false;
1414
}
1515

16-
std::string path = in->readLine().c_str();
17-
std::unique_ptr<FirebaseGet> get(fbase().getPtr(path));
18-
19-
if (get->error()) {
16+
String path = in->readLine();
17+
String value = fbase().getString(path);
18+
if (fbase().error().length() != 0) {
2019
out->print("-FAIL ");
21-
out->println(get->error().message().c_str());
20+
out->println(fbase().error().c_str());
2221
return false;
2322
}
2423

25-
String value(get->response().c_str());
2624
// TODO implement json parsing to pull and process value.
2725
out->print("+");
2826
out->println(value);

Diff for: contrib/src/modem/db/push-command.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,14 @@ bool PushCommand::execute(const String& command,
1414
return false;
1515
}
1616

17-
std::string path(in->readStringUntil(' ').c_str());
18-
std::string data(in->readLine().c_str());
17+
String path = in->readStringUntil(' ');
18+
String data = in->readLine();
1919

20-
std::unique_ptr<FirebasePush> push(
21-
fbase().pushPtr(path, EncodeForJson(data)));
20+
fbase().pushString(path, data);
2221

23-
if (push->error()) {
22+
if (fbase().error().length() != 0) {
2423
out->print("-FAIL ");
25-
out->println(push->error().message().c_str());
24+
out->println(fbase().error().c_str());
2625
return false;
2726
} else {
2827
out->println("+OK");

Diff for: contrib/src/modem/db/remove-command.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ bool RemoveCommand::execute(const String& command,
1414
}
1515

1616
String path = in->readLine();
17-
std::unique_ptr<FirebaseRemove> get(fbase().removePtr(path.c_str()));
17+
fbase().remove(path);
1818

19-
if (get->error()) {
19+
if (fbase().error().length() != 0) {
2020
out->print("-FAIL ");
21-
out->println(get->error().message().c_str());
21+
out->println(fbase().error().c_str());
2222
return false;
2323
}
2424

Diff for: contrib/src/modem/db/set-command.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,14 @@ bool SetCommand::execute(const String& command,
1414
return false;
1515
}
1616

17-
std::string path(in->readStringUntil(' ').c_str());
18-
std::string data(in->readLine().c_str());
17+
String path = in->readStringUntil(' ');
18+
String data = in->readLine();
1919

20-
std::unique_ptr<FirebaseSet> set(fbase().setPtr(path,
21-
EncodeForJson(data)));
20+
fbase().setString(path, data);
2221

23-
if (set->error()) {
22+
if (fbase().error().length() != 0) {
2423
out->print("-FAIL ");
25-
out->println(set->error().message().c_str());
24+
out->println(fbase().error().c_str());
2625
return false;
2726
} else {
2827
out->println("+OK");

Diff for: contrib/src/modem/db/stream-command.cpp

+9-12
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,24 @@ bool StreamCommand::execute(const String& command,
1313
return false;
1414
}
1515

16-
std::string path = in->readLine().c_str();
17-
std::unique_ptr<FirebaseStream> stream(fbase().streamPtr(path));
16+
String path = in->readLine().c_str();
17+
fbase().stream(path);
1818

19-
if (stream->error()) {
19+
if (fbase().error().length() != 0) {
2020
out->print("-FAIL ");
21-
out->println(stream->error().message().c_str());
21+
out->println(fbase().error().c_str());
2222
return false;
2323
}
24-
2524
bool running = true;
2625
DynamicJsonBuffer buffer;
2726
while(running) {
28-
if (stream->available()) {
29-
std::string json;
30-
FirebaseStream::Event event = stream->read(json);
27+
if (fbase().available()) {
28+
FirebaseObject event = fbase().readEvent();
3129
out->print("+");
32-
out->print(FirebaseStream::EventToName(event).c_str());
30+
out->print(event.getString("type").c_str());
3331
out->print(" ");
34-
const auto& object = buffer.parseObject(json.c_str());
35-
String data = object["data"].asString();
36-
out->println(object["path"].asString());
32+
String data = event.getString("data");
33+
out->println(event.getString("path"));
3734
out->println(data.length());
3835
out->println(data);
3936
} else if (in->available()) {

Diff for: contrib/test/mock-firebase.h

+11-37
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,22 @@
33

44
#include <memory>
55
#include "gtest/gtest.h"
6-
#include "Firebase.h"
6+
#include "FirebaseArduino.h"
77

88
namespace firebase {
99
namespace modem {
1010

11-
class MockFirebase : public Firebase {
11+
class MockFirebase : public FirebaseArduino {
1212
public:
13-
MOCK_METHOD1(getPtr, std::unique_ptr<FirebaseGet>(const std::string&));
14-
MOCK_METHOD2(setPtr, std::unique_ptr<FirebaseSet>(const std::string&, const std::string&));
15-
MOCK_METHOD2(pushPtr, std::unique_ptr<FirebasePush>(const std::string&, const std::string&));
16-
MOCK_METHOD1(removePtr, std::unique_ptr<FirebaseRemove>(const std::string&));
17-
MOCK_METHOD1(streamPtr, std::unique_ptr<FirebaseStream>(const std::string&));
18-
};
19-
20-
class MockFirebaseGet : public FirebaseGet {
21-
public:
22-
MOCK_CONST_METHOD0(response, const std::string&());
23-
MOCK_CONST_METHOD0(error, const FirebaseError&());
24-
};
25-
26-
class MockFirebaseSet : public FirebaseSet {
27-
public:
28-
MOCK_CONST_METHOD0(json, const std::string&());
29-
MOCK_CONST_METHOD0(error, const FirebaseError&());
30-
};
31-
32-
class MockFirebasePush : public FirebasePush {
33-
public:
34-
MOCK_CONST_METHOD0(name, const std::string&());
35-
MOCK_CONST_METHOD0(error, const FirebaseError&());
36-
};
37-
38-
class MockFirebaseRemove : public FirebaseRemove {
39-
public:
40-
MOCK_CONST_METHOD0(error, const FirebaseError&());
41-
};
42-
43-
class MockFirebaseStream : public FirebaseStream {
44-
public:
45-
MOCK_METHOD0(available, bool());
46-
MOCK_METHOD1(read, Event(std::string& event));
47-
MOCK_CONST_METHOD0(error, const FirebaseError&());
13+
MOCK_METHOD0(error, const String &());
14+
MOCK_METHOD1(getString, String (const String& path));
15+
MOCK_METHOD2(pushString, String (const String& path, const String& data));
16+
MOCK_METHOD1(remove, void(const String& path));
17+
MOCK_METHOD2(setString, void(const String& path, const String& data));
18+
MOCK_METHOD0(available, bool ());
19+
MOCK_METHOD0(readEvent, FirebaseObject ());
20+
MOCK_METHOD2(begin, void (const String& host, const String& auth));
21+
MOCK_METHOD1(stream, void (const String& path));
4822
};
4923

5024
} // modem

Diff for: contrib/test/modem/Makefile

+14-8
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ CXXFLAGS += -g -Wall -Wextra -pthread -std=c++11
5555
# All tests produced by this Makefile. Remember to add new tests you
5656
# created to the list.
5757
TESTS = get-command_test set-command_test remove-command_test \
58-
push-command_test begin-command_test stream-command_test \
59-
serial-transceiver_test
58+
push-command_test begin-command_test \
59+
serial-transceiver_test stream-command_test
6060

6161
# All Google Test headers. Usually you shouldn't change this
6262
# definition.
@@ -130,6 +130,12 @@ arduino_mock_all.a : ArduinoMockAll.o
130130

131131
# Builds shared objects.
132132

133+
FirebaseArduino.o : $(FIREBASE_SRC_ROOT)/FirebaseArduino.cpp
134+
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(FIREBASE_SRC_ROOT)/FirebaseArduino.cpp
135+
136+
FirebaseObject.o : $(FIREBASE_SRC_ROOT)/FirebaseObject.cpp
137+
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(FIREBASE_SRC_ROOT)/FirebaseObject.cpp
138+
133139
Firebase.o : $(FIREBASE_SRC_ROOT)/Firebase.cpp
134140
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(FIREBASE_SRC_ROOT)/Firebase.cpp
135141

@@ -144,7 +150,7 @@ get-command.o : $(SRC_ROOT)/modem/db/get-command.cpp
144150
get-command_test.o : $(TEST_DIR)/get-command_test.cpp $(GMOCK_HEADERS)
145151
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/get-command_test.cpp
146152

147-
get-command_test : get-command_test.o Firebase.o FirebaseHttpClient_dummy.o get-command.o gmock_main.a \
153+
get-command_test : get-command_test.o FirebaseArduino.o Firebase.o FirebaseObject.o FirebaseHttpClient_dummy.o get-command.o gmock_main.a \
148154
arduino_mock_all.a
149155
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
150156

@@ -155,7 +161,7 @@ set-command.o : $(SRC_ROOT)/modem/db/set-command.cpp
155161
set-command_test.o : $(TEST_DIR)/set-command_test.cpp $(GMOCK_HEADERS)
156162
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/set-command_test.cpp
157163

158-
set-command_test : set-command.o set-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \
164+
set-command_test : set-command.o set-command_test.o FirebaseArduino.o Firebase.o FirebaseObject.o FirebaseHttpClient_dummy.o gmock_main.a \
159165
arduino_mock_all.a
160166
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
161167

@@ -166,7 +172,7 @@ remove-command.o : $(SRC_ROOT)/modem/db/remove-command.cpp
166172
remove-command_test.o : $(TEST_DIR)/remove-command_test.cpp $(GMOCK_HEADERS)
167173
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/remove-command_test.cpp
168174

169-
remove-command_test : remove-command.o remove-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \
175+
remove-command_test : remove-command.o remove-command_test.o FirebaseArduino.o Firebase.o FirebaseObject.o FirebaseHttpClient_dummy.o gmock_main.a \
170176
arduino_mock_all.a
171177
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
172178

@@ -177,7 +183,7 @@ push-command.o : $(SRC_ROOT)/modem/db/push-command.cpp
177183
push-command_test.o : $(TEST_DIR)/push-command_test.cpp $(GMOCK_HEADERS)
178184
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/push-command_test.cpp
179185

180-
push-command_test : push-command.o push-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \
186+
push-command_test : push-command.o push-command_test.o FirebaseArduino.o Firebase.o FirebaseObject.o FirebaseHttpClient_dummy.o gmock_main.a \
181187
arduino_mock_all.a
182188
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
183189

@@ -188,7 +194,7 @@ begin-command.o : $(SRC_ROOT)/modem/db/begin-command.cpp
188194
begin-command_test.o : $(TEST_DIR)/begin-command_test.cpp $(GMOCK_HEADERS)
189195
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/begin-command_test.cpp
190196

191-
begin-command_test : begin-command.o begin-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \
197+
begin-command_test : begin-command.o begin-command_test.o FirebaseArduino.o Firebase.o FirebaseObject.o FirebaseHttpClient_dummy.o gmock_main.a \
192198
arduino_mock_all.a
193199
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
194200

@@ -199,7 +205,7 @@ stream-command.o : $(SRC_ROOT)/modem/db/stream-command.cpp
199205
stream-command_test.o : $(TEST_DIR)/stream-command_test.cpp $(GMOCK_HEADERS)
200206
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/stream-command_test.cpp
201207

202-
stream-command_test : stream-command.o stream-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \
208+
stream-command_test : stream-command.o stream-command_test.o FirebaseArduino.o Firebase.o FirebaseObject.o FirebaseHttpClient_dummy.o gmock_main.a \
203209
arduino_mock_all.a
204210
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
205211

0 commit comments

Comments
 (0)