Skip to content

Refactor twin_id shouldn't be requested from the user in creation of farm or node #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions packages/registrar_client/lib/models/node.dart
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,8 @@ class UptimeReport {
}

class NodeRegistrationRequest extends NodeBase {
final int twinID;
late final int twinID;
NodeRegistrationRequest({
required this.twinID,
required int farmID,
required List<Interface> interfaces,
required Location location,
Expand Down
11 changes: 7 additions & 4 deletions packages/registrar_client/lib/src/accounts.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ class Accounts {
);

final response = await _client.post(path: '$path/', body: body.toJson());
return Account.fromJson(response);
final account = Account.fromJson(response);
_client.twinId = account.twinID;
return account;
}

Future<Account> getByTwinID(int twinID) async {
Expand All @@ -39,11 +41,12 @@ class Accounts {
return Account.fromJson(response);
}

Future<dynamic> update(int twinID, AccountUpdateRequest body) async {
Future<dynamic> update(AccountUpdateRequest body) async {
final twinId = _client.twinId!;
final header = await createAuthHeader(
twinID, _client.mnemonicOrSeed, _client.keypairType);
twinId, _client.mnemonicOrSeed, _client.keypairType);
final response = await _client.patch(
path: '$path/$twinID', body: body.toJson(), headers: header);
path: '$path/$twinId', body: body.toJson(), headers: header);
return response;
}
}
14 changes: 14 additions & 0 deletions packages/registrar_client/lib/src/client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class RegistrarClient {
final String mnemonicOrSeed;
final KPType keypairType;

late final int? twinId;
late final Zos zos;
late final Nodes nodes;
late final Farms farms;
Expand All @@ -29,6 +30,19 @@ class RegistrarClient {
nodes = Nodes(this);
farms = Farms(this);
accounts = Accounts(this);
_initialize();
}

Future<void> _initialize() async {
final publicKey = await derivePublicKey(mnemonicOrSeed, keypairType);
try{
final account = await this.accounts.getByPublicKey(publicKey);
this.twinId = account.twinID;
} catch(e){
if (!e.toString().contains("404")){
throw e;
}
}
}

dynamic _handleResponse(http.Response response) {
Expand Down
15 changes: 9 additions & 6 deletions packages/registrar_client/lib/src/farms.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ class Farms {

Farms(this._client);

Future<int> create(String farmName, bool dedicated, String stellarAddress,
int twinID) async {
Future<int> create(
String farmName, bool dedicated, String stellarAddress) async {
final twinId = _client.twinId!;
final header = await createAuthHeader(
twinID, _client.mnemonicOrSeed, _client.keypairType);
twinId, _client.mnemonicOrSeed, _client.keypairType);
final farm = Farm(
dedicated: dedicated,
farmName: farmName,
stellarAddress: stellarAddress,
twinID: twinID);
twinID: twinId);
final response = await _client.post(
path: '$path/', body: farm.toJson(), headers: header);
return response['farm_id'];
Expand All @@ -33,13 +34,15 @@ class Farms {
return List<Farm>.from(response.map((farm) => Farm.fromJson(farm)));
}

Future<dynamic> update(int twinID, int farmID,
Future<dynamic> update(int farmID,
{String? farmName, String? stellarAddress}) async {
if (farmName == null && stellarAddress == null) {
return;
}

final twinId = _client.twinId!;
final header = await createAuthHeader(
twinID, _client.mnemonicOrSeed, _client.keypairType);
twinId, _client.mnemonicOrSeed, _client.keypairType);
final body = {
if (farmName != null) 'farm_name': farmName,
if (stellarAddress != null) 'stellar_address': stellarAddress
Expand Down
12 changes: 7 additions & 5 deletions packages/registrar_client/lib/src/nodes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Nodes {
Nodes(this._client);

Future<int> create(NodeRegistrationRequest node) async {
node.twinID = _client.twinId!;
final header = await createAuthHeader(
node.twinID, _client.mnemonicOrSeed, _client.keypairType);
final response = await _client.post(
Expand All @@ -27,18 +28,19 @@ class Nodes {
return List<Node>.from(response.map((node) => Node.fromJson(node)));
}

Future<dynamic> update(int twinID, int nodeID, UpdateNodeRequest node) async {
Future<dynamic> update(int nodeID, UpdateNodeRequest node) async {
final twinId = _client.twinId!;
final header = await createAuthHeader(
twinID, _client.mnemonicOrSeed, _client.keypairType);
twinId, _client.mnemonicOrSeed, _client.keypairType);
final response = await _client.patch(
path: '$path/$nodeID', body: node.toJson(), headers: header);
return response;
}

Future<dynamic> reportNodeUptime(
int twinID, int nodeID, ReportUptimeRequest uptime) async {
Future<dynamic> reportNodeUptime(int nodeID, ReportUptimeRequest uptime) async {
final twinId = _client.twinId!;
final header = await createAuthHeader(
twinID, _client.mnemonicOrSeed, _client.keypairType);
twinId, _client.mnemonicOrSeed, _client.keypairType);
final response = await _client.post(
path: '$path/$nodeID/uptime', body: uptime.toJson(), headers: header);
return response;
Expand Down
16 changes: 6 additions & 10 deletions packages/registrar_client/test/accounts_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,31 @@ import 'package:registrar_client/registrar_client.dart';

void main() {
group('Test Account', () {
int twinID = 0;

final mnemonic = generateMnemonic();

final client = RegistrarClient(
baseUrl: 'http://registrar/v1', mnemonicOrSeed: mnemonic);
baseUrl: 'https://registrar.dev4.grid.tf/v1', mnemonicOrSeed: mnemonic);

test('Create Account', () async {
final account = await client.accounts.create();

expect(account, isNotNull);
expect(account, isA<Account>());
expect(account.twinID, isNotNull);

twinID = account.twinID;
});

test('Get Account by TwinID', () async {
final account = await client.accounts.getByTwinID(twinID);
final account = await client.accounts.getByTwinID(client.twinId!);

expect(account, isNotNull);
expect(account.twinID, twinID);
expect(account.twinID, client.twinId!);
});

test('Get Account by PublicKey', () async {
final account = await client.accounts
.getByPublicKey(await derivePublicKey(mnemonic, KPType.sr25519));
expect(account, isNotNull);
expect(account.twinID, twinID);
expect(account.twinID, client.twinId!);
});

test('Update Account', () async {
Expand All @@ -43,10 +39,10 @@ void main() {
rmbEncKey: 'rmbEncKey',
);

final response = await client.accounts.update(twinID, body);
final response = await client.accounts.update(body);
expect(response, isNotNull);

final account = await client.accounts.getByTwinID(twinID);
final account = await client.accounts.getByTwinID(client.twinId!);
expect(account, isNotNull);
expect(account.relays, body.relays);
expect(account.rmbEncKey, body.rmbEncKey);
Expand Down
16 changes: 7 additions & 9 deletions packages/registrar_client/test/farms_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,15 @@ import 'package:registrar_client/registrar_client.dart';
void main() {
group('Test Farm', () {
int farmID = 0;
int twinID = 0;
final client = RegistrarClient(
baseUrl: 'http://registrar/v1', mnemonicOrSeed: generateMnemonic());
baseUrl: 'https://registrar.dev4.grid.tf/v1', mnemonicOrSeed: generateMnemonic());
test('Create Farm', () async {
final account = await client.accounts.create();
twinID = account.twinID;
final farmName = '${DateTime.now()} - farm';
await client.accounts.create();
final farmName = '${DateTime.now().millisecondsSinceEpoch ~/ 1000}farm';
final stellarAddress =
"GC6CG2ME7UCJ56CEQ223QWWZ6N3UGTSXVNRJGDTE2DXUO4NQBLXZRWU5";
final farmIDCreated =
await client.farms.create(farmName, true, stellarAddress, twinID);
await client.farms.create(farmName, true, stellarAddress);
expect(farmID, isNotNull);
expect(farmID, isA<int>());
farmID = farmIDCreated;
Expand All @@ -28,7 +26,7 @@ void main() {
});

test('List Farm with twinID', () async {
final filter = FarmFilter(twinID: twinID);
final filter = FarmFilter(twinID: client.twinId!);
final farms = await client.farms.list(filter);
expect(farms, isNotNull);
expect(farms, isA<List<Farm>>());
Expand All @@ -43,9 +41,9 @@ void main() {
});

test('Update Farm', () async {
final farmName = '${DateTime.now()} - farm';
final farmName = '${DateTime.now()}farm';
final response =
await client.farms.update(twinID, farmID, farmName: farmName);
await client.farms.update(farmID , farmName: farmName, stellarAddress: 'GC6CG2ME7UCJ56CEQ223QWWZ6N3UGTSXVNRJGDTE2DXUO4NQBLXZRWU5');
expect(response, isNotNull);

final farm = await client.farms.get(farmID);
Expand Down
17 changes: 7 additions & 10 deletions packages/registrar_client/test/nodes_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,21 @@ void main() async {
group('Test Nodes', () {
final mnemonic = generateMnemonic();
final client = RegistrarClient(
baseUrl: 'http://registrar/v1', mnemonicOrSeed: mnemonic);
int twinID = 0;
baseUrl: 'https://registrar.dev4.grid.tf/v1', mnemonicOrSeed: mnemonic);
int farmID = 0;
int nodeID = 0;
test('Register node', () async {
final account = await client.accounts.create();
twinID = account.twinID;
await client.accounts.create();
final stellarAddress =
"GC6CG2ME7UCJ56CEQ223QWWZ6N3UGTSXVNRJGDTE2DXUO4NQBLXZRWU5";
final farmName = '${DateTime.now()} - farm';
final farmName = '${DateTime.now().millisecondsSinceEpoch ~/ 1000}farm';
final farmIDCreated =
await client.farms.create(farmName, true, stellarAddress, twinID);
await client.farms.create(farmName, true, stellarAddress);
expect(farmID, isNotNull);
expect(farmID, isA<int>());
farmID = farmIDCreated;

final node = NodeRegistrationRequest(
twinID: twinID,
farmID: farmID,
interfaces: [
Interface(
Expand Down Expand Up @@ -67,7 +64,7 @@ void main() async {
});

test('List nodes', () async {
final nodes = await client.nodes.list(NodeFilter(twinID: twinID));
final nodes = await client.nodes.list(NodeFilter(twinID: client.twinId!));
expect(nodes, isNotNull);
expect(nodes, isA<List<Node>>());
expect(nodes.length, greaterThan(0));
Expand Down Expand Up @@ -99,7 +96,7 @@ void main() async {
virtualized: true,
);

final updatedNode = await client.nodes.update(twinID, nodeID, node);
final updatedNode = await client.nodes.update(nodeID, node);
expect(updatedNode, isNotNull);

final nodeUpdated = await client.nodes.get(nodeID);
Expand All @@ -115,7 +112,7 @@ void main() async {
);

final response =
await client.nodes.reportNodeUptime(twinID, nodeID, uptime);
await client.nodes.reportNodeUptime(nodeID, uptime);
expect(response, isNotNull);

final node = await client.nodes.get(nodeID);
Expand Down