Add C# driver test examples

Summary:
Freeze python's neo4j driver version.
Add multiple transactions example in C#.
Update Python example to 1.5.0 Neo4j driver.

Reviewers: mferencevic, buda, mislav.bradac

Reviewed By: mislav.bradac

Subscribers: dgleich, pullbot

Differential Revision: https://phabricator.memgraph.io/D949
This commit is contained in:
Teon Banek 2017-11-07 10:22:16 +01:00
parent 93bc9accd8
commit 1c5658f294
7 changed files with 175 additions and 38 deletions

View File

@ -1,3 +1,7 @@
# csharp driver
csharp/*.dll
csharp/*.exe
# java driver
java/*.jar
java/*.class

View File

@ -0,0 +1,22 @@
using System;
using System.Linq;
using Neo4j.Driver.V1;
public class Basic {
public static void Main(string[] args) {
var config = Config.DefaultConfig;
config.EncryptionLevel = EncryptionLevel.None;
using(var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.None, config))
using(var session = driver.Session())
{
session.Run("MATCH (n) DETACH DELETE n").Consume();
session.Run("CREATE (alice:Person {name: \"Alice\", age: 22})").Consume();
var result = session.Run("MATCH (n) RETURN n").First();
var alice = (INode) result["n"];
Console.WriteLine(alice["name"]);
Console.WriteLine(string.Join(", ", alice.Labels));
Console.WriteLine(alice["age"]);
}
Console.WriteLine("All ok!");
}
}

View File

@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Neo4j.Driver.V1;
public class Transactions
{
public static void Main(string[] args) {
var config = Config.DefaultConfig;
config.EncryptionLevel = EncryptionLevel.None;
using(var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.None, config))
{
ClearDatabase(driver);
// Wrong query.
try
{
using(var session = driver.Session())
using(var tx = session.BeginTransaction())
{
CreatePerson(tx, "mirko");
// Incorrectly start CREATE
tx.Run("CREATE (").Consume();
CreatePerson(tx, "slavko");
tx.Success();
}
}
catch (ClientException)
{
Console.WriteLine("Rolled back transaction");
}
Trace.Assert(CountNodes(driver) == 0, "Expected transaction was rolled back.");
// Correct query.
using(var session = driver.Session())
using(var tx = session.BeginTransaction())
{
CreatePerson(tx, "mirka");
CreatePerson(tx, "slavka");
tx.Success();
}
Trace.Assert(CountNodes(driver) == 2, "Expected 2 created nodes.");
ClearDatabase(driver);
using(var session = driver.Session())
{
// Create a lot of nodes so that the next read takes a long time.
session.Run("UNWIND range(1, 100000) AS i CREATE ()").Consume();
try
{
Console.WriteLine("Running a long read...");
session.Run("MATCH (a), (b), (c), (d), (e), (f) RETURN COUNT(*) AS cnt").Consume();
}
catch (TransientException)
{
Console.WriteLine("Transaction timed out");
}
}
}
Console.WriteLine("All ok!");
}
private static void CreatePerson(ITransaction tx, string name)
{
var parameters = new Dictionary<string, Object>{{"name", name}};
var result = tx.Run("CREATE (person:Person {name: $name}) RETURN person", parameters);
Console.WriteLine("Created: " + ((INode) result.First()["person"])["name"]);
}
private static void ClearDatabase(IDriver driver)
{
using(var session = driver.Session())
session.Run("MATCH (n) DETACH DELETE n").Consume();
}
private static int CountNodes(IDriver driver)
{
using(var session = driver.Session())
{
var result = session.Run("MATCH (n) RETURN COUNT(*) AS cnt");
return Convert.ToInt32(result.First()["cnt"]);
}
}
}

37
tests/drivers/csharp/run.sh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/bash
set -e
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $script_dir
if ! which nuget >/dev/null; then
echo "Please install nuget!"
exit 1
fi
if ! which mono >/dev/null; then
echo "Please install mono!"
exit 1
fi
if ! which mcs >/dev/null; then
echo "Please install mcs!"
exit 1
fi
driver=Neo4j.Driver
version=1.5.0
if [ ! -f $driver.dll ]; then
nuget_dir=`mktemp -d nuget.XXXXXXXX` || exit 1
nuget install $driver -Version $version -OutputDirectory $nuget_dir || exit 1
cp $nuget_dir/$driver.$version/lib/net452/$driver.dll ./ || exit 1
rm -rf $nuget_dir || exit 1
fi
mcs -reference:$driver.dll Basic.cs
mono Basic.exe
mcs -reference:$driver.dll Transactions.cs
mono Transactions.exe

View File

@ -21,7 +21,7 @@ if [ ! -d "ve3" ]; then
fi
source ve3/bin/activate
$PIP install --upgrade pip
$PIP install neo4j-driver
$PIP install neo4j-driver==1.5.0
# execute test
$PYTHON basic.py

View File

@ -1,11 +1,8 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from neo4j.v1 import GraphDatabase, basic_auth, ClientError, TransientError
driver = GraphDatabase.driver("bolt://localhost:7687",
auth=basic_auth("", ""),
encrypted=False)
from neo4j.v1 import GraphDatabase, basic_auth
from neo4j.exceptions import ClientError, TransientError
def tx_error(tx, name, name2):
a = tx.run("CREATE (a:Person {name: $name}) RETURN a", name=name).data()
@ -21,38 +18,33 @@ def tx_good(tx, name, name2):
print(a[0]['a'])
def tx_too_long(tx):
a = tx.run("MATCH (a), (b), (c), (d), (e), (f) RETURN COUNT(*) AS cnt")
print(a[0]['cnt'])
tx.run("MATCH (a), (b), (c), (d), (e), (f) RETURN COUNT(*) AS cnt")
def add_person(f, name, name2):
with GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("", ""),
encrypted=False) as driver:
def add_person(f, name, name2):
with driver.session() as session:
session.write_transaction(f, name, name2)
# Wrong query.
try:
add_person(tx_error, "mirko", "slavko")
except ClientError:
pass
# Correct query.
add_person(tx_good, "mirka", "slavka")
# Setup for next query.
with driver.session() as session:
session.write_transaction(f, name, name2)
session.run("UNWIND range(1, 100000) AS x CREATE ()")
# Wrong query.
try:
add_person(tx_error, "mirko", "slavko")
except ClientError:
pass
# Query that will run for a very long time, transient error expected.
with driver.session() as session:
try:
session.run("MATCH (a), (b), (c), (d), (e), (f) RETURN COUNT(*) AS cnt")
except TransientError:
print("transient error")
# Correct query.
add_person(tx_good, "mirka", "slavka")
# Setup for next query.
with driver.session() as session:
session.write_transaction(
lambda tx: tx.run("UNWIND range(1, 100000) AS x CREATE ()"))
# Query that will run for a very long time, transient error expected.
try:
session = driver.session()
session.read_transaction(tx_too_long)
except TransientError:
print("transient error")
except:
assert False, "TransientError should have been thrown"
finally:
session.close()
driver.close()
print("All ok!")
print("All ok!")

View File

@ -15,7 +15,7 @@ for i in *; do
if [ ! -d $i ]; then continue; fi
pushd $i
echo "Running: $i"
./run.sh || exit 1
./run.sh || exit 1
echo
popd
done