diff options
| -rw-r--r-- | tests/basic/changelog/changelog-history.t | 1 | ||||
| -rw-r--r-- | tests/basic/changelog/history-api.t | 42 | ||||
| -rw-r--r-- | tests/utils/changelog/changelog.h | 6 | ||||
| -rw-r--r-- | tests/utils/changelog/test-history-api.c | 111 | ||||
| -rw-r--r-- | tests/volume.rc | 11 | 
5 files changed, 171 insertions, 0 deletions
diff --git a/tests/basic/changelog/changelog-history.t b/tests/basic/changelog/changelog-history.t index 3ce40981c90..106e5db9211 100644 --- a/tests/basic/changelog/changelog-history.t +++ b/tests/basic/changelog/changelog-history.t @@ -82,5 +82,6 @@ EXPECT "0" $HISTORY_BIN_PATH/get-history $time_in_sec_htime1 $time_in_sec_htime2  EXPECT "0" $HISTORY_BIN_PATH/get-history $time_in_sec_htime2 $time_after_disable  TEST rm $HISTORY_BIN_PATH/get-history +rm -rf /tmp/scratch_v1/*  cleanup; diff --git a/tests/basic/changelog/history-api.t b/tests/basic/changelog/history-api.t new file mode 100644 index 00000000000..9e63118cef9 --- /dev/null +++ b/tests/basic/changelog/history-api.t @@ -0,0 +1,42 @@ +#!/bin/bash +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../env.rc + +cleanup; + +HISTORY_BIN_PATH=$(dirname $0)/../../utils/changelog +build_tester $HISTORY_BIN_PATH/test-history-api.c -lgfchangelog + +CHANGELOG_PATH_0="$B0/${V0}0/.glusterfs/changelogs" +ROLLOVER_TIME=2 + +TEST glusterd +TEST pidof glusterd + +TEST $CLI volume create $V0 $H0:$B0/${V0}0 +TEST $CLI volume set $V0 changelog.changelog on +TEST $CLI volume set $V0 changelog.rollover-time $ROLLOVER_TIME +TEST $CLI volume start $V0 + +sleep 3 +start=$(date '+%s') + +TEST $GFS --volfile-id=$V0 --volfile-server=$H0 $M0; +touch $M0/file{1..10} + +for i in {1..12};do echo "data" > $M0/file$i; sleep 1;done +end=$(date '+%s') +sleep 2 + +#Passes as start and end falls in same htime file +EXPECT "0" $HISTORY_BIN_PATH/test-history-api $start $end + +#Wait for changelogs to be in .processed directory +sleep 2 + +EXPECT "Y" processed_changelogs "/tmp/scratch_v1/.history/.processed" +TEST rm $HISTORY_BIN_PATH/test-history-api +rm -rf /tmp/scratch_v1 + +cleanup; diff --git a/tests/utils/changelog/changelog.h b/tests/utils/changelog/changelog.h index 969a1f370c2..1502b689eb4 100644 --- a/tests/utils/changelog/changelog.h +++ b/tests/utils/changelog/changelog.h @@ -116,4 +116,10 @@ int  gf_history_changelog(char *changelog_dir, unsigned long start,                       unsigned long end, int n_parallel,                       unsigned long *actual_end); +int +gf_history_changelog_scan(); +ssize_t +gf_history_changelog_next_change(char *bufptr, size_t maxlen); +int +gf_history_changelog_done(char *file);  #endif diff --git a/tests/utils/changelog/test-history-api.c b/tests/utils/changelog/test-history-api.c new file mode 100644 index 00000000000..d78e387df10 --- /dev/null +++ b/tests/utils/changelog/test-history-api.c @@ -0,0 +1,111 @@ +/* +   Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com> +   This file is part of GlusterFS. + +   This file is licensed to you under your choice of the GNU Lesser +   General Public License, version 3 or any later version (LGPLv3 or +   later), or the GNU General Public License, version 2 (GPLv2), in all +   cases as published by the Free Software Foundation. +*/ + +/** + * get set of new changes every 10 seconds (just print the file names) + * + * Compile it using: + *  gcc -o gethistory `pkg-config --cflags libgfchangelog` get-history.c \ + *  `pkg-config --libs libgfchangelog` + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/un.h> +#include <limits.h> +#include <sys/socket.h> +#include <sys/types.h> + +#include "changelog.h" + +int +main(int argc, char **argv) +{ +    int ret = 0; +    int i = 0; +    unsigned long end_ts = 0; +    ssize_t nr_changes = 0; +    ssize_t changes = 0; +    int start = 0; +    int end = 0; +    char fbuf[PATH_MAX] = { +        0, +    }; + +    ret = gf_changelog_init(NULL); +    if (ret) { +        printf("-1"); +        fflush(stdout); +        return -1; +    } + +    ret = gf_changelog_register("/d/backends/patchy0", "/tmp/scratch_v1", +                                "/var/log/glusterfs/changes.log", 9, 5); +    if (ret) { +        printf("-2"); +        fflush(stdout); +        return -1; +    } + +    start = atoi(argv[1]); +    end = atoi(argv[2]); + +    ret = gf_history_changelog("/d/backends/patchy0/.glusterfs/changelogs", +                               start, end, 3, &end_ts); +    if (ret < 0) { +        printf("-3"); +        fflush(stdout); +        return -1; +    } else if (ret == 1) { +        printf("1"); +        fflush(stdout); +        return 0; +    } + +    while (1) { +        nr_changes = gf_history_changelog_scan(); +        if (nr_changes < 0) { +            printf("-4"); +            fflush(stdout); +            return -1; +        } + +        if (nr_changes == 0) { +            goto out; +        } + +        while ((changes = gf_history_changelog_next_change(fbuf, PATH_MAX)) > +               0) { +            /* process changelog */ +            /* ... */ +            /* ... */ +            /* ... */ +            /* done processing */ + +            ret = gf_history_changelog_done(fbuf); +            if (ret) { +                printf("-5"); +                fflush(stdout); +                return -1; +            } +        } +        if (changes == -1) { +            printf("-6"); +            fflush(stdout); +            return -1; +        } +    } + +out: +    printf("0"); +    fflush(stdout); +    return 0; +} diff --git a/tests/volume.rc b/tests/volume.rc index af7690ba5ff..de99e7038f4 100644 --- a/tests/volume.rc +++ b/tests/volume.rc @@ -902,6 +902,17 @@ function check_changelog_op {          $PYTHON $(dirname $0)/../../utils/changelogparser.py ${clog_path}/CHANGELOG | grep "$op" | wc -l  } +function processed_changelogs { +        local processed_dir=$1 +        count=$(ls -l $processed_dir | grep CHANGELOG | wc -l) +        if [ $count -gt 0 ]; +        then +            echo "Y" +        else +            echo "N" +        fi +} +  function volgen_check_ancestry {          #Returns Y if ancestor_xl is an ancestor of $child_xl according to the volfile          local volfile="$1"  | 
