summaryrefslogtreecommitdiff
path: root/tests/libgit2/object/validate.c
blob: e11038115da7a506de6afb3ff3f5cbcb0d388b05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include "clar_libgit2.h"

#define VALID_COMMIT_SHA1 \
	"tree bdd24e358576f1baa275df98cdcaf3ac9a3f4233\n" \
	"parent d6d956f1d66210bfcd0484166befab33b5987a39\n" \
	"author Edward Thomson <ethomson@edwardthomson.com> 1638286404 -0500\n" \
	"committer Edward Thomson <ethomson@edwardthomson.com> 1638324642 -0500\n" \
	"\n" \
	"commit go here.\n"

#define VALID_TREE_SHA1 \
	"100644 HEADER\0\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42"

#define INVALID_COMMIT_SHA1 \
	"tree bdd24e358576f1baa275df98cdcaf3ac9a3f4233\n" \
	"parent d6d956f1d66210bfcd0484166befab33b5987a39\n" \
	"committer Edward Thomson <ethomson@edwardthomson.com> 1638324642 -0500\n" \
	"\n" \
	"commit go here.\n"

#define INVALID_TREE_SHA1 \
	"100644 HEADER \x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42"

#define VALID_COMMIT_SHA256 \
	"tree d0fc7f52dc42358506e7f3f3be72f5271994abb104b9397ab3e19bb42361504d\n" \
	"parent 652412419a24ba62a1d897f40aeb80eecbf873797b04a1bbb8d71918653ef65b\n" \
	"author Edward Thomson <ethomson@edwardthomson.com> 1638286404 -0500\n" \
	"committer Edward Thomson <ethomson@edwardthomson.com> 1638324642 -0500\n" \
	"\n" \
	"commit go here.\n"

#define VALID_TREE_SHA256 \
	"100644 HEADER\0\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42"

#define INVALID_COMMIT_SHA256 \
	"tree d0fc7f52dc42358506e7f3f3be72f5271994abb104b9397ab3e19bb42361504d\n" \
	"parent 652412419a24ba62a1d897f40aeb80eecbf873797b04a1bbb8d71918653ef65b\n" \
	"committer Edward Thomson <ethomson@edwardthomson.com> 1638324642 -0500\n" \
	"\n" \
	"commit go here.\n"

#define INVALID_TREE_SHA256 \
	"100644 HEADER \x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42"

#ifdef GIT_EXPERIMENTAL_SHA256
# define sha1_rawcontent_is_valid(v, c, l, t) \
         git_object_rawcontent_is_valid(v, c, l, t, GIT_OID_SHA1)
#else
# define sha1_rawcontent_is_valid(v, c, l, t) \
         git_object_rawcontent_is_valid(v, c, l, t)
#endif

void test_object_validate__valid_sha1(void)
{
	int valid;

	cl_git_pass(sha1_rawcontent_is_valid(&valid, "", 0, GIT_OBJECT_BLOB));
	cl_assert_equal_i(1, valid);

	cl_git_pass(sha1_rawcontent_is_valid(&valid, "foobar", 0, GIT_OBJECT_BLOB));
	cl_assert_equal_i(1, valid);

	cl_git_pass(sha1_rawcontent_is_valid(&valid, VALID_COMMIT_SHA1, CONST_STRLEN(VALID_COMMIT_SHA1), GIT_OBJECT_COMMIT));
	cl_assert_equal_i(1, valid);

	cl_git_pass(sha1_rawcontent_is_valid(&valid, VALID_TREE_SHA1, CONST_STRLEN(VALID_TREE_SHA1), GIT_OBJECT_TREE));
	cl_assert_equal_i(1, valid);
}

void test_object_validate__cannot_parse_sha256_as_sha1(void)
{
	int valid;

	cl_git_pass(sha1_rawcontent_is_valid(&valid, VALID_COMMIT_SHA256, CONST_STRLEN(INVALID_COMMIT_SHA256), GIT_OBJECT_COMMIT));
	cl_assert_equal_i(0, valid);

	cl_git_pass(sha1_rawcontent_is_valid(&valid, INVALID_TREE_SHA256, CONST_STRLEN(INVALID_TREE_SHA256), GIT_OBJECT_TREE));
	cl_assert_equal_i(0, valid);
}

void test_object_validate__invalid_sha1(void)
{
	int valid;

	cl_git_pass(sha1_rawcontent_is_valid(&valid, "", 0, GIT_OBJECT_COMMIT));
	cl_assert_equal_i(0, valid);

	cl_git_pass(sha1_rawcontent_is_valid(&valid, "foobar", 0, GIT_OBJECT_COMMIT));
	cl_assert_equal_i(0, valid);

	cl_git_pass(sha1_rawcontent_is_valid(&valid, INVALID_COMMIT_SHA1, CONST_STRLEN(INVALID_COMMIT_SHA1), GIT_OBJECT_COMMIT));
	cl_assert_equal_i(0, valid);

	cl_git_pass(sha1_rawcontent_is_valid(&valid, INVALID_TREE_SHA1, CONST_STRLEN(INVALID_TREE_SHA1), GIT_OBJECT_TREE));
	cl_assert_equal_i(0, valid);
}


void test_object_validate__valid_sha256(void)
{
#ifndef GIT_EXPERIMENTAL_SHA256
	cl_skip();
#else
	int valid;

	cl_git_pass(git_object_rawcontent_is_valid(&valid, "", 0, GIT_OBJECT_BLOB, GIT_OID_SHA256));
	cl_assert_equal_i(1, valid);

	cl_git_pass(git_object_rawcontent_is_valid(&valid, "foobar", 0, GIT_OBJECT_BLOB, GIT_OID_SHA256));
	cl_assert_equal_i(1, valid);

	cl_git_pass(git_object_rawcontent_is_valid(&valid, VALID_COMMIT_SHA256, CONST_STRLEN(VALID_COMMIT_SHA256), GIT_OBJECT_COMMIT, GIT_OID_SHA256));
	cl_assert_equal_i(1, valid);

	cl_git_pass(git_object_rawcontent_is_valid(&valid, VALID_TREE_SHA256, CONST_STRLEN(VALID_TREE_SHA256), GIT_OBJECT_TREE, GIT_OID_SHA256));
	cl_assert_equal_i(1, valid);
#endif
}

void test_object_validate__invalid_sha256(void)
{
#ifndef GIT_EXPERIMENTAL_SHA256
	cl_skip();
#else
	int valid;

	cl_git_pass(git_object_rawcontent_is_valid(&valid, "", 0, GIT_OBJECT_COMMIT, GIT_OID_SHA256));
	cl_assert_equal_i(0, valid);

	cl_git_pass(git_object_rawcontent_is_valid(&valid, "foobar", 0, GIT_OBJECT_COMMIT, GIT_OID_SHA256));
	cl_assert_equal_i(0, valid);

	cl_git_pass(git_object_rawcontent_is_valid(&valid, INVALID_COMMIT_SHA256, CONST_STRLEN(INVALID_COMMIT_SHA256), GIT_OBJECT_COMMIT, GIT_OID_SHA256));
	cl_assert_equal_i(0, valid);

	cl_git_pass(git_object_rawcontent_is_valid(&valid, INVALID_TREE_SHA256, CONST_STRLEN(INVALID_TREE_SHA256), GIT_OBJECT_TREE, GIT_OID_SHA256));
	cl_assert_equal_i(0, valid);
#endif
}

void test_object_validate__cannot_parse_sha1_as_sha256(void)
{
#ifndef GIT_EXPERIMENTAL_SHA256
	cl_skip();
#else
	int valid;

	cl_git_pass(git_object_rawcontent_is_valid(&valid, VALID_COMMIT_SHA1, CONST_STRLEN(INVALID_COMMIT_SHA1), GIT_OBJECT_COMMIT, GIT_OID_SHA256));
	cl_assert_equal_i(0, valid);

	cl_git_pass(git_object_rawcontent_is_valid(&valid, INVALID_TREE_SHA1, CONST_STRLEN(INVALID_TREE_SHA1), GIT_OBJECT_TREE, GIT_OID_SHA256));
	cl_assert_equal_i(0, valid);
#endif
}